Что такое http-заголовок «X-XSS-Protection»?


194

Так что я сейчас играю с HTTP для развлечения в telnet (то есть просто telnet google.com 80набираю и вставляю случайные GET и POST с разными заголовками и т. П.), Но я наткнулся на то, что google.com передает в своих заголовках, которые я не знаю

Я просматривал http://www.w3.org/Protocols/rfc2616/rfc2616.html и не нашел определения для этого конкретного http-заголовка, который, похоже, выдает Google:

GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Wed, 01 Feb 2012 03:42:24 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=6ddbc0a0342e7e63:FF=0:TM=1328067744:LM=1328067744:S=4d4farvCGl5Ww0C3; expires=Fri, 31-Jan-2014 03:42:24 GMT; path=/; domain=.google.com
Set-Cookie: NID=56=PgRwCKa8EltKnHS5clbFuhwyWsd3cPXiV1-iXzgyKsiy5RKXEKbg89gWWpjzYZjLPWTKrCWhOUhdInOlYU56LOb2W7XpC7uBnKAjMbxQSBw1UIprzw2BFK5dnaY7PRji; expires=Thu, 02-Aug-2012 03:42:24 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

1000

Кто-нибудь знает, что X-XSS-Protectionэто?


6
FWIW, «правильное» место для поиска спецификаций полей заголовка - это не спецификация HTTP (в настоящее время RFC 2616), а реестр полей заголовка сообщения IANA (при этом он там не указан)
Джулиан Решке,

1
@JulianReschke, почему это так? Разве HTTP-спецификация не должна быть авторитетной по HTTP?
Pacerier

1
Спецификация HTTP делегирует реестр заголовков в IANA.
Джулиан Решке

Ответы:


107

X-XSS-Protection - это HTTP-заголовок, понятный для Internet Explorer 8 (и более новых версий). Этот заголовок позволяет доменам включать и выключать «XSS-фильтр» IE8, который предотвращает некоторые категории XSS-атак. IE8 имеет фильтр, активированный по умолчанию, но серверы могут отключиться, установив

   X-XSS-Protection: 0

Смотрите также http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header. ASPX


108
Это очень расплывчато. Точно как же этот заголовок предотвратить XSS? Итак, теперь IE видит, X-XSS-Protection:1а затем, какой алгоритм он использует для предотвращения XSS?
Пейсер

11
Детали трудно найти, потому что это запатентованная технология. По сути, IE отслеживает, возвращаются ли какие-либо из подозрительно выглядящих параметров, которые браузер отправляет на веб-сайт, в декодированном ответе. Например, если пользователь нажимает на attack-me.com/… (что означает «> <script> alert ('XSS') </ script>» и в результате получает страницу, содержащую этот сценарий, IE предотвратит это.
Лука Инверницци

11
Таким образом, мне кажется (доказательства трудно найти), что он защищает только от отраженного XSS ( infosecisland.com/blogview/… ), а также потому, что у него нет никакого средства для обнаружения сохраненного XSS (также называемого постоянным XSS).
Лука Инвернизци

11
хм, кажется, пустяки вокруг маркетинга со стороны Microsoft в попытке заставить IE выглядеть лучше ....
Matej

5
Ну, это представлено в маркетинговом пуху, но код, кажется, работает. Вы можете проверить это здесь Engieie.com/test/xss/BlockMode.asp (также связанный в сообщении блога MSDN).
Лука Инвернизци

61
  • X-XSS-Protection: 1 : Принудительная защита XSS (полезно, если защита XSS была отключена пользователем)

  • X-XSS-Protection: 0 : Отключить защиту XSS

  • Токен mode=blockне позволит браузеру (браузерам IE8 + и Webkit) отображать страницы (вместо очистки), если обнаружена потенциальная атака с отражением XSS (= непостоянная).

/! \ Предупреждение, mode=blockсоздает уязвимость в IE8 ( подробнее ).

Дополнительная информация: http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspx и http://blog.veracode.com / 2014/03 / руководящие принципы-для-настройки-безопасности-заголовков /


6
Для записи, ошибка IE8 была исправлена ​​(CVE-2009-4074)
yakatz

developer.mozilla.org/es/docs/Web/HTTP/Headers/X-XSS-Protection В этой ссылке мы можем найти описание X-XSS-Protection
Maria Montenegro

1
Обратите внимание, что 0это единственное безопасное значение для этого заголовка. См. Stackoverflow.com/a/57802070/334451 для получения подробной информации.
Микко Ранталайнен

49

Этот заголовок ответа можно использовать для настройки встроенной отражающей защиты XSS агента пользователя. В настоящее время этот заголовок поддерживают только Microsoft Internet Explorer, Google Chrome и Safari (WebKit).

Internet Explorer 8 включил новую функцию, помогающую предотвратить отраженные межсайтовые сценарии, известную как XSS Filter . Этот фильтр работает по умолчанию в зонах безопасности «Интернет», «Доверенная» и «Ограниченная». Страницы зоны локальной интрасети могут подключиться к защите с использованием того же заголовка.

О заголовке, который вы разместили в своем вопросе,

Заголовок X-XSS-Protection: 1; mode=blockвключает фильтр XSS. Вместо того, чтобы дезинфицировать страницу, при обнаружении атаки XSS браузер предотвращает рендеринг страницы.

В марте 2010 года мы добавили в IE8 поддержку нового токена в заголовке X-XSS-Protection, mode = block.

X-XSS-Protection: 1; mode=block

При наличии этого токена, если обнаружена потенциальная атака XSS Reflection, Internet Explorer предотвратит рендеринг страницы. Вместо того, чтобы пытаться очистить страницу для хирургического удаления XSS-атаки, IE будет отображать только «#».

Internet Explorer распознает возможную межсайтовую скриптовую атаку. Он регистрирует событие и отображает соответствующее сообщение для пользователя. Статья MSDN описывает, как работает этот заголовок.

Как этот фильтр работает в IE ,

Подробнее об этой статье, https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/

Фильтр XSS работает как компонент IE8 с видимостью всех запросов / ответов, проходящих через браузер. Когда фильтр обнаруживает вероятный XSS в межсайтовом запросе, он идентифицирует и нейтрализует атаку, если он воспроизводится в ответе сервера. Пользователям не задаются вопросы, на которые они не могут ответить - IE просто блокирует выполнение вредоносного скрипта.

С новым XSS-фильтром пользователи IE8 Beta 2, столкнувшиеся с XSS-атакой Type-1, увидят уведомление, подобное следующему:

IE8 XSS Уведомление об атаке

Страница была изменена, и атака XSS заблокирована.

В этом случае XSS-фильтр обнаружил атаку межсайтового скриптинга в URL-адресе. Он нейтрализовал эту атаку, поскольку идентифицированный скрипт был воспроизведен обратно на страницу ответа. Таким образом, фильтр эффективен без изменения начального запроса к серверу или блокировки всего ответа.

Событие фильтра межсайтовых сценариев регистрируется, когда Windows Internet Explorer 8 обнаруживает и смягчает атаку межсайтовых сценариев (XSS). Атаки межсайтовых сценариев происходят, когда один веб-сайт, обычно злонамеренный, внедряет (добавляет) код JavaScript в иные законные запросы на другой веб-сайт. Первоначальный запрос обычно невиновен, например, ссылка на другую страницу или сценарий Common Gateway Interface (CGI), обеспечивающий общую услугу (например, гостевую книгу). Внедренный сценарий обычно пытается получить доступ к привилегированной информации или услугам, которые второй веб-сайт не намеревается разрешить. Ответ или запрос обычно отражают результаты, возвращаемые вредоносному веб-сайту. XSS Filter, новая функция для Internet Explorer 8, обнаруживает JavaScript в URL-запросах и HTTP-запросах POST. Если JavaScript обнаружен, Фильтр XSS ищет доказательства отражения, информацию, которая будет возвращена атакующему веб-сайту, если запрос атаки был оставлен без изменений. Если отражение обнаружено, XSS-фильтр очищает исходный запрос, так что дополнительный JavaScript не может быть выполнен. Фильтр XSS затем регистрирует это действие как событие фильтра межсайтовых сценариев. На следующем изображении показан пример сайта, который был изменен для предотвращения атаки межсайтовых сценариев.

Источник: https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

Веб-разработчики могут захотеть отключить фильтр для своего контента. Они могут сделать это, установив заголовок HTTP:

X-XSS-Protection: 0

Подробнее о заголовках безопасности,


1
Обратите внимание, что X-XSS-Protection: 0это единственный безопасный заголовок для этой функции. Для получения дополнительной информации см stackoverflow.com/a/57802070/334451
Микко Rantalainen

10

Вы можете увидеть в этом списке полезных заголовков HTTP .

X-XSS-Protection: этот заголовок включает фильтр межсайтовых сценариев (XSS), встроенный в самые последние веб-браузеры. В любом случае он обычно включен по умолчанию, поэтому роль этого заголовка заключается в том, чтобы повторно включить фильтр для этого конкретного веб-сайта, если он был отключен пользователем. Этот заголовок поддерживается в IE 8+ и в Chrome (не уверен, какие версии). Фильтр анти-XSS был добавлен в Chrome 4. Неизвестно, учитывает ли эта версия этот заголовок.


К сожалению, эта функция вызывает проблемы безопасности, и только безопасное значение X-XSS-Protection: 0. Для получения дополнительной информации см stackoverflow.com/a/57802070/334451
Микко Rantalainen

9

TL; DR: Все хорошо написанные веб-сайты (/ приложения) должны испускать заголовок X-XSS-Protection: 0и просто забыть об этой функции. Если вы хотите иметь дополнительную безопасность, которую могут обеспечить лучшие пользовательские агенты, используйте строгий Content-Security-Policyзаголовок.

Длинный ответ:

HTTP-заголовок X-XSS-Protection- это одна из тех вещей, которые Microsoft представила в Internet Explorer 8.0 (MSIE 8), которая должна была повысить безопасность неправильно написанных веб-сайтов.

Идея состоит в том, чтобы применить некоторую эвристику, чтобы попытаться обнаружить отражение XSS-атаки и автоматически нейтрализовать атаку.

Проблемная часть этого - «эвристика» и «стерилизация». Эвристика вызывает ложные срабатывания, и стерилизация не может быть безопасно выполнена, поскольку она вызывает побочные эффекты, которые можно использовать для реализации атак XSS и DoS на совершенно безопасных веб-сайтах.

Плохо то, что если веб-сайт не X-XSS-Protectionотправляет заголовок, браузер будет вести себя так, как если бы заголовок X-XSS-Protection: 1был отправлен. Хуже всего то, что это значение является наименее безопасным значением из всех возможных значений для этого заголовка!

Для данного защищенного веб-сайта (т. Е. На сайте отсутствуют отражающие XSS-уязвимости) эта функция «XSS-защиты» позволяет выполнять следующие атаки:

X-XSS-Protection: 1позволяет злоумышленнику выборочно блокировать части JavaScript и поддерживать работу остальных сценариев. Это возможно, потому что эвристика этой функции просто «если значение какого-либо параметра GET найдено в части сценария источника страницы, сценарий будет автоматически изменен зависимым от агента пользователя способом». На практике злоумышленник может, например, добавить параметр, disablexss=<script src="framebuster.js"и браузер автоматически удалит строку <script src="framebuster.js"из фактического источника страницы. Обратите внимание, что остальная часть страницы продолжает работать, и злоумышленник только что удалил эту часть безопасности страницы. На практике любой JS в исходном коде страницы может быть изменен. В некоторых случаях страница без уязвимости XSS с отраженным содержимым может использоваться для запуска выбранного JavaScript на странице из-за стерилизацииневерное преобразование данных простого текста в исполняемый код JavaScript .

X-XSS-Protection: 1; mode=blockпозволяет злоумышленнику утекать данные из источника страницы, используя поведение страницы в качестве побочного канала. Например, если страница содержит код JavaScript вдоль строк var csrf_secret="521231347843", злоумышленник просто добавляет дополнительный параметр, например, leak=var%20csrf_secret="3и если страница НЕ заблокирована, 3неправильная первая цифра. Атакующий пытается снова, на этот раз leak=var%20csrf_secret="5загрузка страницы будет прервана. Это позволяет злоумышленнику узнать, что первая цифра секрета 5. Затем злоумышленник продолжает угадывать следующую цифру.

В конце концов, если ваш сайт полон атак отражением XSS, использование значения по умолчанию 1немного уменьшит поверхность атаки. Однако, если ваш сайт защищен и вы не излучаете X-XSS-Protection: 0, ваш сайт будет уязвим любым браузером, который поддерживает эту функцию. Если вам нужна глубокая защита от браузеров от неизвестных уязвимостей XSS на вашем сайте, используйте строгий Content-Security-Policyзаголовок. Это не открывает ваш сайт для известных уязвимостей.

В настоящее время эта функция включена по умолчанию в MSIE, Safari и Google Chrome. Раньше это было включено в Edge, но Microsoft уже удалила эту ошибочную функцию из Edge . Mozilla Firefox никогда не реализовывал это.

Смотрите также:

https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html https://blog.innerht.ml/the-misunderstood-x-xss-protection/ http: / /p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf https://www.slideshare.net/masatokinugawa/xxn-en https://bugs.chromium.org/p/chromium/issues/detail?id=396544 https: // bugs.chromium.org/p/chromium/issues/detail?id=498982

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.