htmlspecialchars против htmlentities при работе с XSS - PullRequest
28 голосов
/ 02 сентября 2010

Я видел много противоречивых ответов по этому поводу.Многие люди любят цитировать, что одни только функции php не защитят вас от xss.

Что именно XSS может сделать через htmlspecialchars и что может сделать это через htmlentities?

Я понимаю разницу междуфункции, но не различные уровни защиты XSS вы остались.Кто-нибудь может объяснить?

Ответы [ 3 ]

13 голосов
/ 02 сентября 2010

htmlspecialchars () НЕ защитит вас от эксплойтов USS UTF-7, которые все еще преследуют Internet Explorer, даже в IE 9: http://securethoughts.com/2009/05/exploiting-ie8-utf-7-xss-vulnerability-using-local-redirection/

Например:

<?php
$_GET['password'] = 'asdf&ddddd"fancy˝quotes˝';

echo htmlspecialchars($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancyË

echo htmlentities($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&amp;ddddd&quot;fancy&Euml;quotes

Вывсегда следует использовать htmlentities и очень редко использовать htmlspecialchars при очистке пользовательского ввода.Также вы должны всегда удалять теги раньше.А для действительно важных и безопасных сайтов вы должны НИКОГДА доверять strip_tags ().Используйте HTMLPurifier для PHP .

4 голосов
/ 01 января 2014

Если команда PHP header используется для установки кодировки

header('Content-Type: text/html; charset=utf-8');

затем htmlspecialchars и htmlentities оба должны быть безопасными для вывода HTML, потому что XSS не может быть тогда достигнуто с использованием кодировок UTF-7.

Обратите внимание, что эти функции не следует использовать для вывода значений в JavaScript или CSS, поскольку можно будет вводить символы, позволяющие избежать использования JavaScript или CSS, и подвергнуть ваш сайт риску. Обратитесь к Шпаргалке по профилактике XSS , чтобы узнать, как правильно обращаться с этими ситуациями.

2 голосов
/ 19 декабря 2012

Я не уверен, что вы нашли ответ, который искали, но я также ищу уборщика HTML.У меня есть приложение, которое я создаю, и я хочу иметь возможность взять HTML-код, возможно даже Javascript или другие языки и поместить их в БД MySQL, не вызывая проблем и не допуская проблем с XSS.Я нашел HTML Purifier , и, похоже, это наиболее разработанный и все еще поддерживаемый инструмент для очистки информации, предоставленной пользователями в системе PHP.Связанная страница - это их страница сравнения, которая может дать обоснование того, почему их или другой инструмент может быть полезен.Надеюсь, это поможет!

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