Я прочитал это перед "вход фильтрами, выход выхода", но является ли фильтрация ввода действительно необходимой, когда я использую PDO с PHP? Я думал, что с PDO мне не нужно фильтровать входные данные, потому что подготовленный оператор заботится о SQL-инъекциях. Я думаю, что "выход выхода" по-прежнему действителен, но "вход фильтра" по-прежнему действителен?
Является ли "вход фильтра, выход выхода" все еще действительным с PDO
Ответ 1
Да, это все еще актуально.
Фильтрация заключается не в предотвращении уязвимостей системы безопасности, а в том, что вы не заселяете свою базу данных мусором. Если вы ожидаете дату, убедитесь, что она по крайней мере выглядит как дата до ее сохранения.
Выход экранов - это предотвращение уязвимостей системы безопасности (а именно XSS или сценариев Cross Site Scripting).
Итак, оба они очень важны и полностью не связаны с SQL Injection (хотя значительное число разработчиков все еще путают фильтрацию с экранированием для SQL-запросов и, следовательно, могут быть подвержены уязвимостям)...
Ответ 2
В зависимости от того, какие данные вы сохраняете, да, он все равно может быть действительным.
Например, скажем, у вас есть окно комментариев, и пользователь пишет сообщение, содержащее разметку HTML. В этом случае вы часто захотите удалить указанную HTML-разметку из текста комментария, даже если это закончилось тем, что было экранировано (после этого, вероятно, это будет не очень приятно).
Существуют и другие случаи, например, если у вас есть поле номера телефона, вы можете отфильтровать его так, чтобы он был в определенном формате, используемом вашим приложением, и т.д.
Ответ 3
Всегда фильтровать ввод пользователя. Всегда. Возможно, вы защищаете от атак или, может быть, выполняете проверку бизнес-правил и т.д. Имейте в виду, что нет технологии или процедуры, которые предотвратят все атаки, а только атаки, которые были специально разработаны для предотвращения. SQL-инъекция - не единственная проблема, которую следует избегать.
Ответ 4
В соответствии с SQL-инъекцией и безопасностью, если вы правильно используете PDO с переменными привязки, вам не нужно санировать. Но, как отметил Яни, в зависимости от данных, которые вы сохраняете, таких как текстовое поле, которое не позволяет html, вы можете захотеть дезинфицировать свои данные или если поле должно быть числом, на котором выполняется parseInt(), или что нибудь. Но это не будет требоваться для безопасности, но для вашей собственной разумности базы данных. Это отвратительно, когда кто-то пытается помещать html в комментарий, и вы выплевываете его, и вы видите > < и др.
Ответ 5
Да, он выходит из ввода, но не сразу, как magic_quotes_gpc
. Магические кавычки - это ужасный подход к безопасности. Уязвимости сильно зависят от того, как используются испорченные данные, у вас никогда не может быть 1 функции, которая все время фиксирует все. Также во время потока приложения может быть случай, когда другая функция подрывает magic_quotes, например stripslashes()
, base64_decode()
, urldecode()
, htmlspecialchars_decode($var,ENT_QUOTES);
и даже substr()
.
Короче говоря, вы всегда должны избегать ввода во время использования. pdo и adodb делает это, и он делает это отлично.