PHP MySQL - рекомендации по санитарии и валидации - PullRequest
1 голос
/ 19 марта 2011

Я только что открыл PHP-фильтры для очистки и проверки, и я использовал MySQL mysql_escape_string для остановки SQL-инъекций.

Теперь я обнаружил, что PHP также может помочь, и я думаю, что логически эти процедуры не являются исключительными вих функция: т.е. вы можете санировать и проверять в PHP и все же прийти к ситуации, когда необходимо экранирование.

Я прав или я что-то упускаю?

Ответы [ 2 ]

5 голосов
/ 19 марта 2011

Я прав или я что-то упускаю?

Нет, вы совершенно правы.Большой шрифт для случайных читателей, которые могут каким-то образом упустить смысл вашего вопроса.

Различные типы вывода требуют различных типов защиты.

Ядерные вещи, которые могут бытьHTML, и вы будете безопаснее против XSS.Правильно цитируйте и избегайте ввода в базу данных, и вы будете более защищены от SQL-инъекций.Следите за неожиданным вводом везде , и вы повысите безопасность своего кода.

Это удивительно, что вы теперь полностью осознали это.Слишком много людей не .

Я просто обнаруживаю, что PHP очищает и проверяет фильтры

Это хорошо, не так ли?Они хорошая часть современного PHP.Используйте их религиозно, и они не подведут вас.За исключением электронного письма, оно не проходит большое количество крайних случаев;Я предпочитаю is_email .

Я использовал MySQL mysql_escape_string, чтобы остановить SQL-инъекцию.

Это ... не очень хорошая часть современногоPHP.Я также надеюсь, что вы используете функцию escape-строки со словом «real», в противном случае у вас могут возникнуть проблемы.

Я думаю, что вы готовы к следующему шагу: Learn PDO .Он содержит подготовленных операторов и заполнителей запросов , которые обеспечат вам полную и полную защиту от SQL-инъекций при правильном использовании.PDO доступен везде, где доступны современные версии PHP.Это встроено прямо. Используйте это, изучите это, любите это.Или ты обречен.Обреченный!

0 голосов
/ 19 марта 2011

Я бы посоветовал вам избегать каждого бита данных, который вы вставляете в запрос, с помощью соответствующей функции или метода, поддерживающего кодирование, предоставляемой вашим расширением базы данных. Для mysql_ это будет mysql_real_escape_string (не забудьте часть real_!).

Аргументация проста: код развивается. Часто может случиться, что ограничения для значения ослаблены. Представьте, что вы разрешали только буквенно-цифровые символы для имен раньше, а теперь вы хотите разрешить все символы Юникода. Таким образом, теперь ' разрешено в именах два. Но очень жаль, что в вашем коде не было этого mysql_real_escape_string, потому что вы думали, что имя было безопасным Что ж, теперь уже слишком поздно, данные частного пользователя были прочитаны и теперь циркулируют на черном рынке ...

...