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