Htmlspecialchars против htmlentities, когда речь идет о XSS
Я видел много противоречивых ответов об этом. Многие люди любят цитировать, что только функции php не будут защищать вас от xss.
Что XSS точно может сделать через htmlspecialchars и что может сделать это через htmlentities?
Я понимаю разницу между функциями, но не разными уровнями защиты xss, с которыми вы остались. Может ли кто-нибудь объяснить?
Ответы
Ответ 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&ddddd"fancyË
echo htmlentities($_GET['password'], ENT_COMPAT | ENT_HTML401, 'UTF-8') . "\n";
// Output: asdf&ddddd"fancyË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, которая может дать рассуждения о том, почему их или другой инструмент может быть полезен. Надеюсь, это поможет!