xss_clean () обширный, а также глупый. 90% этой функции не делает ничего, чтобы предотвратить xss. Например, ищет слово alert
, но не document.cookie
. Ни один хакер не собирается использовать alert
в своем эксплойте, они собираются перехватить cookie с помощью xss или прочитать токен CSRF для создания XHR.
Однако выполнение htmlentities()
или htmlspecialchars()
с ним является избыточным. Случай, когда xss_clean()
устраняет проблему, а htmlentities($text, ENT_COMPAT, 'UTF-8')
дает сбой, является следующим:
<?php
print "<img src='$var'>";
?>
Простой документ:
http://localhost/xss.php?var=http://domain/some_image.gif'%20onload=alert(/xss/)
Это добавит обработчик события onload=
к тегу изображения. Метод остановки этой формы xss - htmlspecialchars($var,ENT_QUOTES);
или в этом случае xss_clean()
также предотвратит это.
Однако, цитата из документации xss_clean ():
Ничто не может быть надежным на 100%
конечно, но я не смог получить
что-нибудь прошло фильтр.
При этом XSS - это output problem
, а не и input problem
. Например, эта функция не может учитывать, что переменная уже находится в теге <script>
или обработчике события. Это также не останавливает XSS на основе DOM. Вам нужно учитывать , как вы используете данные , чтобы использовать наилучшую функцию. Фильтрация всех данных на входе - это плохая практика . Он не только небезопасен, но и искажает данные, что затрудняет сравнение.