«Вход фильтра, выход выхода» остается в силе с PDO - PullRequest
10 голосов
/ 18 ноября 2010

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

Ответы [ 5 ]

9 голосов
/ 18 ноября 2010

Да, это все еще действует.

Фильтрация - это не предотвращение уязвимостей безопасности, это не заполнение вашей базы мусором.Если вы ожидаете дату, убедитесь, что она по крайней мере похожа на дату, прежде чем ее сохранить.

Выход от выхода - это предотвращение уязвимостей безопасности (а именно XSS или межсайтовый скриптинг).

Так что да, оба они очень важны и совершенно не связаны с SQL-инъекцией (хотя значительное количество разработчиков все еще путают фильтрацию с экранированием для запросов SQL и, следовательно, могут по-прежнему подвергаться уязвимостям) ...

3 голосов
/ 18 ноября 2010

Всегда фильтровать пользовательский ввод. Всегда. Возможно, вы защищаете от атак, или вы выполняете проверку бизнес-правил и т. Д. Помните, что не существует технологии или процедуры, которая будет предотвращать все атаки, а только те, для которых она была специально разработана для предотвращения. SQL-инъекция - не единственная проблема, которую следует избегать.

3 голосов
/ 18 ноября 2010

В зависимости от того, какие данные вы сохраняете, да, они все еще могут быть действительными.

Например, допустим, у вас есть поле для комментариев, и пользователь пишет сообщение, содержащее разметку HTML.В этом случае вам часто захочется удалить указанную HTML-разметку из текста комментария, даже если в конечном итоге его экранировали (в конце концов, это, вероятно, будет выглядеть не очень хорошо).

Есть и другие случаи,например, если у вас есть поле номера телефона, вы можете отфильтровать его, чтобы оно соответствовало конкретному формату, используемому вашим приложением, и т. д.

1 голос
/ 18 ноября 2010

В соответствии с sql-инъекцией и безопасностью, если вы правильно используете PDO с переменными связывания, нет необходимости выполнять санитарную обработку. Но, как указал Яни, в зависимости от данных, которые вы сохраняете, таких как текстовое поле, которое не поддерживает HTML, вы можете захотеть очистить ваши данные, или если поле должно быть числом, запустив parseInt () или что-то. Но это не будет требоваться для безопасности, но для вашей собственной базы данных. Это некрасиво, когда кто-то пытается вставить html в комментарий, а вы его выплевываете и видите> <и т. Д. </p>

0 голосов
/ 18 ноября 2010

Да, это экранирование ввода, но не сразу, как magic_quotes_gpc. Магические кавычки - это ужасный подход к безопасности. Уязвимости в значительной степени зависят от того, как используются испорченные данные, у вас никогда не будет 1 функции, которая все исправляет все время. Также во время выполнения приложения может быть случай, когда другая функция подрывает magic_quotes, например stripslashes(), base64_decode(), urldecode(), htmlspecialchars_decode($var,ENT_QUOTES); и даже substr().

Короче говоря, вы всегда должны избегать ввода во время использования . pdo и adodb делают это, и делают это отлично.

...