Веб-инженерия
Заголовки безопасности HTTP: практическое руководство по настройке
Как защитить сайт от XSS, кликджекинга и перехвата сессий с помощью правильной настройки заголовков CSP, HSTS и Permissions-Policy.
Заголовки безопасности HTTP (HTTP Security Headers) передаются сервером в ответ на запрос браузера и активируют встроенные механизмы защиты на стороне клиента.
Большинство веб-сайтов уязвимы к атакам межсайтового скриптинга (XSS) и кликджекингу не из-за ошибок в коде, а из-за отсутствия нескольких строк конфигурации веб-сервера.
Разберем обязательные заголовки безопасности и правила их настройки.
1. Strict-Transport-Security (HSTS)
HSTS принудительно заставляет браузер обращаться к сайту исключительно по защищенному протоколу HTTPS, предотвращая атаки типа Man-in-the-Middle и перехват cookie.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
max-age=31536000фиксирует правило на один год.includeSubDomainsраспространяет защиту на все поддомены.
2. Content-Security-Policy (CSP)
Самый мощный инструмент защиты от XSS-атак. CSP строго определяет доверенные домены, с которых разрешена загрузка скриптов, стилей, изображений и подключений.
Пример строгой политики:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted-cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:;
Рекомендация: Начните внедрение с заголовка Content-Security-Policy-Report-Only, чтобы собрать отчеты о нарушениях и убедиться, что легитимные скрипты не блокируются.
3. X-Frame-Options
Запрещает встраивание страниц сайта во фреймы <iframe> на сторонних ресурсах, полностью защищая пользователей от атак кликджекинга (clickjacking).
X-Frame-Options: DENY
4. X-Content-Type-Options
Запрещает браузерам пытаться угадать MIME-тип файла вопреки заголовку сервера (nosniff). Это предотвращает выполнение загруженных картинок как исполняемого JavaScript-кода.
X-Content-Type-Options: nosniff
5. Referrer-Policy
Управляет тем, какая часть URL передается в заголовке Referer при переходе по внешним ссылкам.
Referrer-Policy: strict-origin-when-cross-origin
Защищает конфиденциальные параметры из адресной строки от утечки сторонним сайтам.
6. Заголовки, которые нужно удалить
ServerиX-Powered-By(раскрывают версию PHP/Nginx/Apache злоумышленникам).X-XSS-Protection(устарел и удален из современных браузеров из-за собственных уязвимостей).