Руководства
Как исправить заголовки безопасности (CSP, HSTS)
Отсутствие заголовков безопасности подвергает веб-приложения атакам межсайтового скриптинга (XSS), кликджекингу, понижению протокола и утечке учетных данных. Их устранение требует настройки веб-сервера и точного задания директив.
Внедрите Strict-Transport-Security со сроком один год и preload, настройте строгий Content-Security-Policy для скриптов и фреймов, добавьте X-Content-Type-Options: nosniff, задайте frame-ancestors 'none' и Referrer-Policy.
Диагностика отсутствующих заголовков ответа
Перед изменением конфигурации веб-сервера проверьте текущие заголовки ответа с помощью curl -IL или автоматизированного сканера. Определите, на каком уровне завершается TLS и формируются заголовки: на основном веб-сервере (Nginx, Apache), в обратном прокси или на границе CDN. Убедитесь, что заголовки безопасности не удаляются промежуточными прокси-серверами и не перезаписываются middleware бекенда.
Безопасная настройка Strict-Transport-Security (HSTS)
Заголовок HSTS предписывает браузеру обращаться к сайту исключительно по протоколу HTTPS, предотвращая атаки типа SSL stripping. Начните тестирование со значения Strict-Transport-Security: max-age=86400 (один день). После подтверждения доступности всех поддоменов увеличьте параметр до промышленного уровня: max-age=31536000; includeSubDomains; preload. Никогда не указывайте max-age=0 в рабочей среде, так как по стандарту RFC 6797 это обнуляет политику защиты.
Построение строгой Content Security Policy (CSP)
CSP ограничивает источники загрузки и выполнения скриптов в браузере. Для безопасного внедрения используйте заголовок Content-Security-Policy-Report-Only с директивой report-to, чтобы логировать нарушения без блокировки легитимных скриптов пользователей. Задайте default-src 'self', script-src 'self' с одноразовыми nonces или SHA-256 хешами вместо 'unsafe-inline' и 'unsafe-eval', запретите плагины object-src 'none' и задайте frame-ancestors 'none'. После проверки переведите CSP в боевой режим.
Защита от кликджекинга, MIME-sniffing и утечки реферера
Защитите пользовательские сессии от встраивания в скрытые iframe с помощью директивы frame-ancestors 'none' в CSP и резервного заголовка X-Frame-Options: DENY для устаревших браузеров. Предотвратите интерпретацию неисполняемых файлов как скриптов директивой X-Content-Type-Options: nosniff. Ограничьте утечку путей и параметров URL при внешних переходах заголовком Referrer-Policy: strict-origin-when-cross-origin.
Внедрение на веб-сервере и проверка
В Nginx директивы задаются в блоке server HTTPS с помощью директивы add_header с флагом always (например: add_header X-Content-Type-Options "nosniff" always;), чтобы они отправлялись даже при ошибках 4xx и 5xx. В Apache используйте директивы Header always set модуля mod_headers. После обновления конфигов перезагрузите сервер (nginx -t && systemctl reload nginx) и проверьте сайт внешним аудитом заголовков безопасности.
Заголовки безопасности: HTTPS, CSP, защита фреймов, MIME, referrer и изоляция браузера.
Запустить бесплатный аудит →