Защита от межсайтовых скриптов (XSS)
Защита от межсайтовых скриптов (XSS)
Нестандартный: Эта функция нестандартна и не соответствует стандартам. Не используйте её на производственных сайтах, обращённых в веб: она не будет работать для всех пользователей. Также могут быть значительные различия в реализации, а поведение может измениться в будущем.
Заголовок ответа HTTP X-XSS-Protection — функция Internet Explorer, Chrome и Safari, которая останавливает загрузку страниц при обнаружении атак типа межсайтового скриптинга (XSS). Эти защиты в основном не нужны в современных браузерах, когда сайты реализуют сильную Content-Security-Policy, которая отключает использование встроенного JavaScript ('unsafe-inline').
Предупреждение: Даже если эта функция может защитить пользователей старых веб-браузеров, которые ещё не поддерживают CSP, в некоторых случаях защита от XSS может создавать уязвимости XSS на в остальном безопасных сайтах. Более подробную информацию см. в разделе ниже.
Примечание:
- Chrome убрал свой XSS-аудитор
- Firefox не, и не будет реализовывать
X-XSS-Protection - Edge снял свой фильтр XSS
Это означает, что если вам не нужно поддерживать устаревшие браузеры, рекомендуется использовать Content-Security-Policy без разрешения unsafe-inline скриптов вместо этого.
| Тип заголовка | Заголовок ответа |
|---|---|
| Запрещённое имя заголовка | нет |
Синтаксис
X-XSS-Protection: 0 X-XSS-Protection: 1 X-XSS-Protection: 1; mode=block X-XSS-Protection: 1; report=<reporting-uri>
- 0
-
Отключает фильтрацию XSS.
- 1
-
Включает фильтрацию XSS (обычно по умолчанию в браузерах). При обнаружении атаки межсайтового скриптинга браузер очистит страницу (удалит небезопасные части).
- 1; mode=block
-
Включает фильтрацию XSS. Вместо очистки страницы, браузер не отобразит страницу, если будет обнаружена атака.
- 1; report=<reporting-URI> (только Chromium)
-
Включает фильтрацию XSS. При обнаружении атаки межсайтового скриптинга браузер очистит страницу и сообщит об нарушении. Это использует функциональность директивы CSP
report-uriдля отправки отчёта.
Уязвимости, вызванные фильтрацией XSS
Рассмотрим следующий фрагмент HTML-кода для веб-страницы:
<script> var productionMode = true; </script> <!-- [...] --> <script> if (!window.productionMode) { // Some vulnerable debug code } </script>
Этот код полностью безопасен, если браузер не выполняет фильтрацию XSS. Однако, если он это делает, и запрос поиска — ?something=%3Cscript%3Evar%20productionMode%20%3D%20true%3B%3C%2Fscript%3E, браузер может выполнить скрипты на странице, игнорируя <script>var productionMode = true;</script> (думает, что сервер включил это в ответ, потому что это было в URI), вызвав window.productionMode, которое будет вычислено как undefined и выполнить небезопасный отладочный код.
Установка заголовка X-XSS-Protection в 0 или 1; mode=block предотвращает уязвимости, подобные описанной выше. Первый вариант заставит браузер выполнить все скрипты, а второй — предотвратит обработку страницы вообще (хотя этот подход может быть уязвим к атакам по побочным каналам, если сайт встраивается в <iframe>).
Пример
Блокировать загрузку страниц при обнаружении атак XSS:
X-XSS-Protection: 1; mode=block
PHP
header("X-XSS-Protection: 1; mode=block");
Apache (.htaccess)
<IfModule mod_headers.c> Header set X-XSS-Protection "1; mode=block" </IfModule>
Nginx
add_header "X-XSS-Protection" "1; mode=block";
Спецификации
Не входит в какие-либо спецификации или черновики.
Совместимость с браузерами
| Рабочий стол | Мобильный | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
X-XSS-Protection |
4-78 |
12-17 |
Нет |
8 |
Да-65 |
Да |
Нет |
Да-78 |
Нет |
Да-56 |
Да |
Да-12.0 |
См. также
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection