PHP MySQL — рекомендации по санитарной обработке и проверке

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

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

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


person T9b    schedule 18.03.2011    source источник
comment
Здесь на SO и в Интернете доступно множество ресурсов, посвященных этому вопросу. Если у вас нет конкретного примера, я бы не ожидал, что этот вопрос останется открытым надолго.   -  person drudge    schedule 19.03.2011


Ответы (2)


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

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

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

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

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

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

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

Я использовал MySQL mysql_escape_string, чтобы остановить SQL Injection.

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

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

person Charles    schedule 19.03.2011
comment
Спасибо за этот исключительный и очень вдумчивый ответ, я много читал (и смотрел) об опасностях и пытался понять, как я могу сломать свою собственную форму. Информации предостаточно, но не так много о контрмерах. Вот почему этот ответ так хорош. - person T9b; 21.03.2011

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

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

person NikiC    schedule 19.03.2011