[Cheat Sheet] Заголовки для защиты сайта
Заголовки HTTP-ответов играют ключевую роль в защите веб-приложений от различных атак. Ниже приведены таблицы с описанием атак и заголовками, которые помогают защититься, с примерами их использования.
Защита от XSS (Cross-Site Scripting)
XSS (Cross-Site Scripting) — это уязвимость, при которой злоумышленник внедряет вредоносный JavaScript в страницу, что позволяет выполнить произвольный код в браузере жертвы.
Для защиты от XSS используются специальные HTTP-заголовки, которые ограничивают выполнение скриптов и предотвращают внедрение вредоносного кода.
Заголовок
Пример
Как помогает
Content-Security-Policy
Content-Security-Policy: default-src 'self'; script-src 'self'
Ограничивает источники, из которых можно загружать скрипты.
X-XSS-Protection
X-XSS-Protection: 1; mode=block
Включает встроенную защиту браузера от XSS.
1
включает защиту.
mode=block
полностью блокирует страницу при обнаружении XSS.
Устаревший заголовок, но все еще полезен для старых браузеров.
X-Content-Type-Options
X-Content-Type-Options: nosniff
Запрещает браузеру "угадывать" тип контента, что предотвращает выполнение кода. Предотвращает выполнение скриптов, замаскированных под другие типы файлов.
Set-Cookie
Set-Cookie: session_id=12345; Secure; HttpOnly; SameSite=Strict
Защищает cookies от кражи через XSS.
Secure
передает cookies только по HTTPS.
HttpOnly
запрещает доступ к cookies через JavaScript.
SameSite=Strict
предотвращает отправку cookies в межсайтовых запросах.
Защита от CSRF (Cross-Site Request Forgery)
Атака: Подделка запросов от имени пользователя.
Заголовок
Пример
Как помогает
SameSite
(в cookies)
Set-Cookie: session_id=12345; SameSite=Strict
Ограничивает отправку cookies только в рамках одного сайта.
Referrer-Policy
Referrer-Policy: strict-origin-when-cross-origin
Контролирует, какие данные передаются в заголовке Referer
.
Защита от Clickjacking
Атака: Обман пользователя для выполнения действий без его ведома.
Заголовок
Пример
Как помогает
X-Frame-Options
X-Frame-Options: DENY
Запрещает встраивание страницы в <iframe>
, что предотвращает Clickjacking.
Content-Security-Policy
Content-Security-Policy: frame-ancestors 'none'
Аналогично X-Frame-Options
, но с более гибкими настройками.
Защита от MIME-sniffing
Атака: Браузер "угадывает" тип контента, что может привести к выполнению вредоносного кода.
Заголовок
Пример
Как помогает
X-Content-Type-Options
X-Content-Type-Options: nosniff
Запрещает браузеру "угадывать" тип контента.
Защита от утечки информации
Атака: Раскрытие внутренней информации о сервере или приложении.
Заголовок
Пример
Как помогает
Server
Server: Apache
→ лучше удалить или изменить на общее значение.
Скрывает информацию о сервере и его версии.
X-Powered-By
Удалить или изменить на общее значение.
Скрывает информацию о технологиях, используемых на сервере.
Защита от перехвата данных (MitM)
Атака: Перехват данных между клиентом и сервером.
Заголовок
Пример
Как помогает
Strict-Transport-Security
(HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains
Принудительно использует HTTPS для всех запросов.
Set-Cookie
(флаг Secure)
Set-Cookie: session_id=12345; Secure; HttpOnly
Передает cookies только по HTTPS, защищая их от перехвата.
Защита от атак на кэш
Атака: Подмена контента в кэше браузера или прокси.
Заголовок
Пример
Как помогает
Cache-Control
Cache-Control: no-store, no-cache, must-revalidate
Запрещает кэширование контента.
Pragma
Pragma: no-cache
Обеспечивает обратную совместимость для старых браузеров.
Защита от атак на CORS (Cross-Origin Resource Sharing)
CORS (Cross-Origin Resource Sharing) — это механизм, который позволяет веб-страницам делать запросы к ресурсам на другом домене (origin), отличном от того, с которого была загружена страница.
CORS — это важный механизм для безопасного взаимодействия между разными origins. Он не предотвращает XSS напрямую, но помогает ограничить доступ к данным, которые могут быть украдены через XSS или другие атаки. Правильная настройка CORS — это ключевой элемент безопасности современных веб-приложений.
Заголовок
Пример
Как помогает
Access-Control-Allow-Origin
Access-Control-Allow-Origin: https://trusted-site.com
Ограничивает источники, которые могут делать запросы.
Access-Control-Allow-Credentials
Access-Control-Allow-Credentials: true
(только для доверенных источников)
Контролирует, могут ли запросы включать cookies или другие учетные данные.
Access-Control-Allow-Methods
Access-Control-Allow-Methods: GET, POST, OPTIONS
Указывает, какие HTTP-методы разрешены для межсайтовых запросов.
Access-Control-Allow-Headers
Access-Control-Allow-Headers: Content-Type, Authorization
Указывает, какие заголовки разрешены в запросах.
Access-Control-Expose-Headers
Access-Control-Expose-Headers: X-Custom-Header
Позволяет клиенту получать доступ к определенным заголовкам ответа.
Access-Control-Max-Age
Access-Control-Max-Age: 86400
(1 день)
Указывает, как долго результаты предварительного запроса (preflight) могут кэшироваться.
Access-Control-Request-Method
Используется в предварительных запросах (preflight).
Указывает метод, который будет использоваться в основном запросе.
Access-Control-Request-Headers
Используется в предварительных запросах (preflight).
Указывает заголовки, которые будут использоваться в основном запросе.
Last updated