Что это действительно делает? Это позволяет третьим лицам ссылаться на испорченную версию вашего сайта.
Он запускается, когда [выполняется несколько условий, и] он видит строку в отправке запроса, которая также дословно существует на странице и которую он считает опасной.
Предполагается, что если <script>something()</script>
существует как в строке запроса, так и в коде страницы, то это должно быть потому, что ваш серверный сценарий небезопасен и отражает эту строку прямо как разметку без экранирования.
Но, конечно, помимо того, что это совершенно правильный запрос, который кто-то мог набрать, который совпадает по совпадению, также возможно, что они совпадают, потому что кто-то посмотрел на страницу и намеренно скопировал ее часть. Например:
http://www.bing.com/search?q=%3Cscript+type%3D%22text%2Fjavascript%22%3E
Следуйте этому в IE8, и я успешно саботировал вашу страницу Bing, так что она выдаст ошибки скрипта, и всплывающие биты результата не будут работать. По сути, он дает злоумышленнику, по чьей ссылке идет переход, лицензию на выбор и отключение частей страницы, которые ему не нравятся - и это может даже включать другие меры безопасности, такие как сценарии фреймбастера.
Что IE8 считает «потенциально опасным»? Гораздо больше и гораздо более странных вещей, чем этот скрипт-тег. например . Более того, похоже, что он сопоставляется с набором «опасных» шаблонов, использующих систему текстовых шаблонов (предположительно, регулярное выражение), вместо любого вида HTML-анализатора, такого как тот, который в конечном итоге будет анализировать саму страницу. Да, используйте IE8, и ваш браузер настроен на HT̈́͜ML w̧̼̜it̏̔h ͙r̿e̴̬g̉̆e͎x͍͔̑̃̽̚.
«XSS защита», глядя на строки в запросе, является совершенно поддельным . Это не может быть «исправлено»; Само понятие изначально ошибочно. Помимо проблемы вступления, когда она не нужна, она не может реально защитить вас от чего-либо, кроме самых основных атак - и злоумышленники наверняка обойдут такие блоки, как IE8, который станет более широко используемым. Если вы забыли правильно избежать вывода HTML, вы все равно будете уязвимы; вся «защита» XSS может предложить вам ложное чувство безопасности. К сожалению, Microsoft, похоже, нравится это ложное чувство безопасности; аналогичная «защита» XSS есть и в ASP.NET, на стороне сервера.
Так что, если у вас есть подсказка об авторизации веб-приложений, и вы должным образом экранировали вывод в HTML, как хороший мальчик, определенно будет хорошей идеей отключить это нежелательное, неосуществимое вторжение с неправильной головой, выведя заголовок:
X-XSS-Protection: 0
в ваших ответах HTTP. (И используйте ValidateRequest="false"
на своих страницах, если вы используете ASP.NET.)
Для всех остальных, кто все еще собирает строки в PHP, не заботясь о правильном кодировании ... ну, вы можете оставить его включенным. Не ожидайте, что это действительно защитит ваших пользователей, но ваш сайт уже сломан, так кого волнует, сломается ли он немного больше, верно?
Чтобы увидеть его в действии, перейдите на страницу AOL Food и щелкните значок «Печать» над историей.
Ах, да, я вижу это нарушение в IE8. Не сразу очевидно, где IE сделал хак с контентом, который прекратил его выполнение, хотя ... единственный междоменный запрос, который я вижу, который является кандидатом на XSS-фильтр, это http://h30405.www3.hp.com/print/start
:
POST /print/start HTTP/1.1
Host: h30405.www3.hp.com
Referer: http://recipe.aol.com/recipe/oatmeal-butter-cookies/142275?
csrfmiddlewaretoken=undefined&characterset=utf-8&location=http%253A%2F%2Frecipe.aol.com%2Frecipe%2Foatmeal-butter-cookies%2F142275&template=recipe&blocks=Dd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%28%2B.%2F%2C%28%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk%7Cpspm%3Db3%3Fd%3Do%7Efsp%7E%7B%3D%25%3F%3D%3C%7D%2F%27%2B%2C.%3D3%3F%3D%7Dsp%7Ct@kfoz%3D%25%3F%3D%7E%7C%7Czqk...
, что параметр blocks
продолжается с страницами, более бессмысленными. Предположительно, есть что-то , что (по стечению обстоятельств?) Отражается в возвращенном HTML и вызывает одну из ошибочных идей IE8 о том, как выглядит эксплойт XSS.
Чтобы это исправить, HP необходимо настроить сервер на h30405.www3.hp.com с заголовком X-XSS-Protection: 0
.