Подтвердить что ты не робот

Htmlspecialchars против htmlentities, когда речь идет о XSS

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

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

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

4b9b3361

Ответ 1

htmlspecialchars() НЕ защитит вас от эксплойтов UTF-7 XSS, которые все еще поражают 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.

Ответ 2

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

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

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

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

Ответ 3

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