Я использую три разных способа предотвращения уязвимости моего веб-приложения для SQL-инъекции.
mysql_real_escape_string()
, которое является предопределенной функцией в PHP , и этот код добавляет обратную косую черту к следующим символам: \x00
, \n
, \r
, \
, '
, "
и \x1a
. Передайте входные значения в качестве параметров, чтобы свести к минимуму вероятность внедрения SQL. Надеюсь, это поможет вам.
Рассмотрим следующий запрос:
$iId = mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string () здесь не защитит. Если вы используете одиночные кавычки ('') вокруг ваших переменных внутри вашего запроса, это то, что защищает вас от этого. Ниже приведено ниже решение:
$iId = (int) mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
В этом вопросе есть хорошие ответы.
Я предлагаю , наилучшим вариантом является использование PDO.
Изменить:
mysql_real_escape_string()
устарел с PHP 5.5.0. Используйте либо mysqli, либо PDO.
Альтернативой mysql_real_escape_string () является
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
Пример:
$iId = $mysqli->real_escape_string("1 OR 1=1");
$mysqli->query("SELECT * FROM table WHERE id = $iId");
Фильтрация IP лучше чем ничего, но она имеет две проблемы:
IP-адреса могут имитироваться.
, Если внутренняя машина поставилась под угрозу (который включает клиентскую рабочую станцию, например, через установку троянца), тогда взломщик может использовать это в качестве хоста перехода или прокси для нападения на систему.
, Если это - действительно уязвимые данные, им не обязательно нужна выделенная машина (хотя это - лучшая практика), но Вы должны, по крайней мере, аутентифицировать своих пользователей так или иначе и не работаете менее чувствительный (и более легко подвергшийся нападению) приложения на той же машине.
И если это действительно чувствительно, приведите специалиста по безопасности для рассмотрения то, что Вы делаете.
редактирование: несущественно, если Вы можете, угробить regex и использовать что-то как tcpwrappers или функции брандмауэринга в ОС, если это имеет кого-либо. Или, если у Вас может быть различный IP-адрес для Вашего приложения, используйте брандмауэр для блокирования внешнего доступа. (И если у Вас нет брандмауэра тогда, можно также сдаться и послать данные по электронной почте взломщикам:-)
Я пошел бы с SSL и некоторыми сертификатами или простым именем пользователя / защита паролем вместо фильтрации IP.
Это зависит точно, КАК безопасный Вам действительно нужен он, чтобы быть.
я предполагаю, что Ваш сервер внешне размещен и не подключен через VPN. Поэтому Вы проверяете, что запрос обращается для Вашего HTTPS (Вы используете HTTPS, не так ли??) сайт в сетях Вашей собственной организации.
Используя regex для соответствия сомнительным звукам IP-адресов Вы не можете только использовать сеть/сетевую маску как все остальные?
, Насколько безопасный это должно действительно быть? Спуфинг IP-адреса не легок, имитировавшие пакеты не могут использоваться для установления Подключения HTTPS, если они также не управляют восходящими маршрутизаторами, чтобы позволить возвращаемым пакетам быть перенаправленными взломщику.
при необходимости в нем, чтобы быть действительно безопасными, просто заставьте отдел ИТ устанавливать VPN и маршрут по частному пространству IP-адресов. Настройте свои ограничения IP-адреса для тех частных адресов. Ограничения IP-адреса, где маршрутизация через основанную на хосте VPN, все еще безопасны, даже если кто-то ставит под угрозу восходящий шлюз по умолчанию.
Если это будет ограничено IP-адресом, то, хотя они могут имитировать IP-адрес, они не будут в состоянии получить ответ. Конечно, если это представлено Интернету, это может все еще быть поражено нападениями кроме против приложения.
Если Ваше приложение проверяет IP-адрес, то это чрезвычайно уязвимо. В той точке у Вас нет защиты в маршрутизаторе, который является, где IP, фильтрующий действительно, должен быть. Ваше приложение, вероятно, проверяет Информацию заголовка HTTP на передающий IP-адрес, и это чрезвычайно легко имитировать. Если Вы блокируете IP-адрес вниз в маршрутизаторе, который является другой историей и купит Вас некоторая реальная безопасность о том, кто может получить доступ к сайту от где.
, Если Вы, делают, получает доступ к приложению внутренне, то SSL не купит Вас очень, если Вы не попытаетесь защитить информацию от сторон, внутренних к организации, или Вы требуете клиентских сертификатов. Это предполагает, что Вы никогда не будете получать доступ к сайту от внешнего соединения (VPNs не рассчитывают, потому что Вы туннелируете во внутреннюю сеть и являетесь технически частью его в той точке). Это не причинит ни одному боль и не, что трудно для установки просто не думайте, что это будет решением всех проблем.
Моя первая мысль о проблеме ресурса должна была бы спросить, не будет ли возможно работать некоторое волшебство с виртуальной машиной?
Кроме того - если IP-адреса Вы проверяете против, или дюйм/с, которого Вы ЗНАЕТЕ, принадлежит компьютерам, которые, как предполагается, получают доступ к приложению или в локальном диапазоне IP, тогда я не вижу, как это не могло быть достаточно безопасно (я на самом деле использую банкомат подхода similiar на проекте, хотя весьма достоверно важно, чтобы сайт был сохранен "скрытым").
Просто, потому что все Ваше внутреннее соответствие дюйм/с данный regex, который не означает, что весь дюйм/с, которые соответствуют данному regex, является внутренним. Так, Ваш regex является точкой возможного отказа безопасности.
я не знаю, какая технология Вы раньше создавали Ваш сайт, но если это - Windows/ASP.net, можно проверить полномочия машины запроса на основе ее учетных данных Windows, когда запрос выполнен.
Ваша безопасность только так же сильна как Ваша самая слабая ссылка. В главной схеме вещей, имитируя IP детские игрушки. Используйте SSL и потребуйте клиентских сертификатов
Как вся безопасность, это бесполезно на своем собственном. Если действительно необходимо поместить его на стоящий с общественностью веб-сервер, используйте белый список IP, с основной автор имени пользователя/пароля, с SSL, с достойная контрольная установка, с актуальное серверное приложение.
Однако какой смысл того, чтобы иметь сервер быть публично доступным, затем ограничивают его только внутренними IP-адресами? Кажется, что это в основном перестраивает то, что NAT дает Вам бесплатно, и с внутренним единственным сервером, плюс Вы должны волноваться об использовании веб-сервера и подобных.
Вы, кажется, ничего не получаете при наличии его внешне доступный, и существует много преимуществ для наличия наличия его быть внутренними единственными..
Стало полезно сначала различать различные виды IP vpn на основе административных отношений, не технологию, взаимосвязав узлы. Как только отношения были определены, различные технологии могли использоваться, в зависимости от требований, таких как служба безопасности и качество обслуживания.