Защищает ли использование преобразования входных данных из HTML-форм в htmlentities атаки, требующие вставки JavaScript? - PullRequest
2 голосов
/ 14 апреля 2010

Мне было интересно, поможет ли преобразование входных данных POST из формы HTML в html-сущности (с помощью функции PHP htmlentities () или с помощью константы FILTER_SANITIZE_SPECIAL_CHARS в тандеме с PHP-функцией filter_input ()), чтобы защитить от любых атак, когда пользователь пытается вставить любой код JavaScript в поле формы или, если есть какая-либо другая функция или тактика на основе PHP, я должен использовать для создания безопасной формы HTML?

Извините за загруженный вопрос о предложении, но это лучшее, что я могу произнести в спешке.

Любые ответы будут с благодарностью и спасибо всем заранее.

racl101

Ответы [ 3 ]

2 голосов
/ 14 апреля 2010

Получилось бы следующее:

<script>alert("Muhahaha");</script>

в

&lt;script&gt;alert("Muhahaha");&lt;/script&gt;

Так что, если вы распечатываете эти данные в HTML позже, вы будете защищены. Это не защитит вас от:

"; alert("Muhahaha");

на тот случай, если вы откликаетесь в сценарии, например:

var t = "Hello there <?php echo $str;?>";

Для этой цели вы должны использовать addslashes() и метод экранирования строки базы данных, например mysql_real_escape_string().

0 голосов
/ 14 апреля 2010

Да, делайте это, когда вы хотите отобразить данные на веб-странице, но я рекомендую не хранить HTML в базе данных в кодированном виде, это может показаться подходящим для больших текстовых полей, но если у вас более короткие заголовки, скажем, 32 символа, обычная 30-символьная строка, которая содержит &, станет &, и это приведет к ошибке SQL или к обрезке данных.

Таким образом, практическое правило - хранить все строки (очевидно, предотвращать внедрение SQL) и обрабатывать ВСЁ как испорченное, независимо от того, откуда оно: база данных, пользовательские формы, RSS-каналы, плоские файлы, XML и т. Д. Это как вы создаете хорошую безопасность, не беспокоясь о переполнении данных или о том, что вам, возможно, придется в один прекрасный день извлекать данные не веб-пользователю, где проблема заключается в кодировке HTML.

0 голосов
/ 14 апреля 2010

да, это один из способов дезинфекции. Преимущество заключается в том, что вы всегда можете отображать содержимое базы данных, не опасаясь xss-атак. однако, «более чистый» подход заключается в том, чтобы хранить необработанные данные в базе данных и выполнять санитарную обработку в представлении - поэтому каждый раз, когда вы хотите показать текст, используйте для него htmlentities ().

однако, ваш подход не учитывает атаки SQL инъекций. Вы можете посмотреть на http://php.net/manual/en/function.mysql-real-escape-string.php, чтобы защититься от этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...