IE8 XSS фильтр: что он на самом деле делает? - PullRequest
43 голосов
/ 12 января 2010

В Internet Explorer 8 появилась новая функция безопасности - XSS-фильтр , который пытается перехватывать попытки межсайтового скриптинга. Это описано так:

XSS-фильтр, новая для Internet Explorer 8 функция, обнаруживает JavaScript в URL-запросах и HTTP-запросах POST. Если JavaScript обнаружен, XSS-фильтр ищет доказательства отражения, информацию, которая будет возвращена атакующему веб-сайту, если запрос на атаку был отправлен без изменений. Если отражение обнаружено, XSS-фильтр очищает исходный запрос, так что дополнительный JavaScript не может быть выполнен.

Я обнаружил, что XSS-фильтр срабатывает, даже когда нет «доказательств отражения», и начинаю думать, что фильтр просто замечает, когда делается запрос к другому сайту, и ответ содержит JavaScript.

Но даже это трудно проверить, потому что эффект, кажется, приходит и уходит. В IE есть разные зоны, и как только я думаю, что воспроизвел проблему, фильтр больше не срабатывает, и я не знаю, почему.

У кого-нибудь есть советы, как с этим бороться? Что на самом деле ищет фильтр? Есть ли способ для хорошего парня отправить POST-данные на сторонний сайт, который может возвращать HTML, который будет отображаться в iframe, и не запускать фильтр?

Справочная информация. Я загружаю библиотеку JavaScript со стороннего сайта. Этот JavaScript собирает некоторые данные с текущей HTML-страницы и публикует их на стороннем сайте, который отображает HTML-код в iframe. Чтобы увидеть его в действии, посетите страницу AOL Food и щелкните значок «Печать» чуть выше истории.

Ответы [ 3 ]

56 голосов
/ 12 января 2010

Что это действительно делает? Это позволяет третьим лицам ссылаться на испорченную версию вашего сайта.

Он запускается, когда [выполняется несколько условий, и] он видит строку в отправке запроса, которая также дословно существует на странице и которую он считает опасной.

Предполагается, что если <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.

25 голосов
/ 12 января 2010

Вы должны отправить мне (ericlaw @ microsoft) сетевой снимок (www.fiddlercap.com) сценария, который вы считаете неверным.

Фильтр XSS работает следующим образом:

  1. Включен ли XSSFILTER для этого процесса?
    Если да - переходите к следующей проверке Если нет - обойти XSS Filter и продолжить загрузку
  2. Является ли загрузка документа (например, фреймом, а не подзагружением)? Если да - переходите к следующей проверке Если нет - обойти XSS Filter и продолжить загрузку
  3. Это запрос HTTP / HTTPS? Если да - переходите к следующей проверке Если нет - обойти XSS Filter и продолжить загрузку
  4. Содержит ли RESPONSE заголовок x-xss-protection? Да: Значение = 1: фильтр XSS включен (проверка на отсутствие проверки) Значение = 0: XSS фильтр отключен (проверка на отсутствие проверки) Нет: перейти к следующей проверке
  5. Загружается ли сайт в зоне, где URLAction включает фильтрацию XSS? (По умолчанию: Интернет, Доверенный, Ограниченный) Если да - переходите к следующей проверке Если нет - обойти XSS Filter и продолжить загрузку
  6. Является ли запрос кросс-сайта? (Заголовок реферера: соответствует ли окончательное (после перенаправления) полное доменное имя в заголовке реферера HTTP-запроса полному доменному имени запрашиваемого URL-адреса?) Если да - обойти XSS Filter и продолжить загрузку Если нет - тогда URL в запросе должен быть кастрирован.
  7. Имеет ли эвристический признак данные ОТВЕТА, полученные из небезопасных ДАННЫХ ЗАПРОСА? Если да - измените ответ.

Теперь точные детали # 7 довольно сложны, но, по сути, вы можете себе представить, что IE выполняет сопоставление данных запроса (URL / тело сообщения) с данными ответа (тела скрипта) и, если они совпадают, тогда ответ данные будут изменены.

В случае вашего сайта вам нужно посмотреть тело сообщения POST по номеру http://h30405.www3.hp.com/print/start и соответствующий ответ.

7 голосов
/ 12 января 2010

На самом деле, это хуже, чем может показаться. Фильтр XSS может сделать безопасные сайты небезопасными. Читайте здесь: http://www.h -online.com / безопасность / Новости / пункт / Security-функция-оф-Интернет-Эксплорер-8-небезопасные-868837.html

Из этой статьи:

Однако Google отключает XSS-фильтр IE, отправляя заголовок X-XSS-Protection: 0, что делает его невосприимчивым.

Я не знаю достаточно о вашем сайте, чтобы судить, может ли это быть решением, но вы можете попробовать. Подробнее о техническом обсуждении фильтра и его отключении можно узнать здесь: http://michael -coates.blogspot.com / 2009/11 / ie8-xss-filter-bug.html

...