есть ли HTTP-заголовок для отключения Javascript для конкретной страницы? Мой веб-сайт предоставляет созданный пользователем HTML-контент (поэтому я не могу просто использовать htmlenitities
), и я хотел бы предотвратить создание сценариев (JavaScript-инъекций).
Я уже использую HttpOnly-cookie для аутентификации только в основном домене, тогда как пользовательский контент отображается только на поддоменах, где cookie не может быть прочитан. Проблема в том, что все еще существует слишком много возможностей для выполнения JavaScript – например, используя атрибуты событий, onclick
как onclick
и Internet Explorer имеет даже свойство в CSS, чтобы разрешить выполнение JavaScript ( expression
), о котором я никогда не слышал раньше. Еще одна интересная идея, которую я прочитал, заключалась в том, чтобы выбросить исключение, чтобы заблокировать следующий код. Еще одна идея заключалась бы в определении списка, содержащего все допустимые теги и, кроме того, массив с каждым именем разрешенного атрибута, но это очень тяжелая работа, и я думаю, что это не будет охватывать все возможные инъекции.
Я предполагаю, что я не единственный человек, у которого есть эта проблема, так что кто-нибудь знает о возможности использования всего возможного вредоносного кода – по крайней мере, в современных браузерах?
Простой мнимый заголовок, похожий на X-Scripting: disabled
, сделает жизнь намного проще!
Да, есть экспериментальный HTTP-заголовок, называемый политикой безопасности контента, который позволяет вам контролировать, откуда приходит JavaScript, что делает невозможным XSS. Однако в настоящее время он поддерживается только Chrome и Firefox.
Рекомендуется включить HttpOnly-cookies, однако это предотвратит точно атаки ZERO . Вы все еще можете использовать XSS, читая токены CSRF и выполняя запросы с XHR .
Существует много способов получить XSS, а сканер уязвимостей, такой как ShieldSeal , найдет (почти) все из них. Skipfish – это сканер уязвимостей с открытым исходным кодом, который очень примитивен, но свободен. Таким образом, большинство веб-приложений имеют дело с широко распространенными уязвимостями. (Я работаю в SheildSeal, и я помогаю создавать свой сканер уязвимостей, и мне нравится моя работа.)
Когда проблема обнаружена, вы должны использовать htmlspecialchars($var)
или htmlspecialchars($var,ENT_QUOTES)
для дезинфекции ввода. ENT_QUOTES может запретить злоумышленнику вводить событие onclick или другое событие JavaScript.