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

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

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

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

Solutions Collecting From Web of "htmlspecialchars против htmlentities, когда речь идет о XSS"

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

Например:

<?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 .

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

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

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

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

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