Що таке http-заголовок "X-XSS-захист"?


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 (що, як це сказано, там не вказано)
Julian Reschke

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. асп


108
Це дуже розпливчасто. Точно як же цей заголовок запобігти XSS? Отже, тепер IE бачить, X-XSS-Protection:1а потім, який алгоритм він використовує для запобігання XSS?
Pacerier

11
Деталі важко знайти, оскільки це власна технологія. По суті, IE відстежує, чи будь-який із підозріло виглядаючих параметрів, які браузер надсилає на веб-сайт, повертається у відповідь, розшифрованій. Наприклад, якщо користувач натискає на napad-me.com/… (що є "> <script> попередження (" XSS ") </script>) і отримує в результаті сторінку, що містить цей сценарій, IE запобігає цьому.
Лука Інверніцці

11
Як таке, мені здається (доказ важко знайти), що він захищає лише від відбитого XSS ( infosecisland.com/blogview/… ), також тому, що він не має жодного засобу для виявлення збереженого XSS (його також називають стійким XSS).
Luca Invernizzi

11
Хм, здається, розмахує маркетинг від Microsoft, намагаючись покращити IE краще ....
Matej

5
Ну, він представлений у маркетинговому пусі, але код, здається, працює. Ви можете перевірити його тут на посиленні.com/ test/ xss/BlockMode.asp (також пов’язане з повідомленням у блозі MSDN).
Luca Invernizzi

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. В даний час лише Internet Explorer, Google Chrome і Safari (WebKit) підтримують цей заголовок.

Internet Explorer 8 включив нову функцію для запобігання відображених скриптових атак між сайтом, відому як фільтр XSS . Цей фільтр за замовчуванням працює в зонах Інтернету, Довірених та Обмежених сайтів. Сторінки локальної інтранетної зони можуть увімкнути захист за допомогою одного і того ж заголовка.

Про заголовок, який ви опублікували у своєму запитанні,

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

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

X-XSS-Protection: 1; mode=block

Якщо цей маркер присутній, якщо виявлена ​​потенційна атака відбиття XSS, 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 типу 1, побачать таке повідомлення, як наступне:

Повідомлення про атаку IE8 XSS

Сторінку було змінено, а атака XSS заблокована.

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

Подія міжсайтового сценарію фільтрів реєструється, коли Windows Internet Explorer 8 виявляє та пом’якшує атаку міжсайтового сценарію (XSS). Напад міжсайтових сценаріїв відбувається, коли один веб-сайт, як правило, шкідливий, вводить (додає) код JavaScript в інакше законні запити на інший веб-сайт. Оригінальний запит, як правило, невинний, наприклад, посилання на іншу сторінку або сценарій загального інтерфейсу шлюзу (CGI), що забезпечує загальну послугу (наприклад, книгу гостей). Введений сценарій, як правило, намагається отримати доступ до привілейованої інформації або послуг, які другий веб-сайт не має наміру дозволяти. Відповідь або запит, як правило, відображають результати на шкідливий веб-сайт. Фільтр XSS - нова функція Internet Explorer 8 - виявляє JavaScript у запитах URL та HTTP POST. Якщо JavaScript виявлений, XSS Filter шукає докази відображення, інформацію, яка буде повернута на веб-сайт, що атакує, якби запит напад був поданий без змін. Якщо відображення відображено, фільтр 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: Цей заголовок дозволяє фільтру сценаріїв між сайтів (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-misunderposed-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/isissue/detail?id=396544 https: // bugs.chromium.org/p/chromium/isissue/detail?id=498982

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.