Настройка заголовков безопасности веб-сервера: HSTS, CSP, X-Frame-Options
- Аудит безопасности (OWASP, Mozilla Observatory, SSL Labs) снижает рейтинг до 'F' из-за отсутствия security-заголовков.
- Уязвимость веб-приложения к Clickjacking-атакам и внедрению XSS-скриптов.
- Браузер отправляет незашифрованные HTTP-запросы до выполнения редиректа на HTTPS.
1. Эталонная настройка заголовков в Nginx
Добавьте директивы в блок server для HTTPS хоста:
server {
listen 443 ssl http2;
server_name secure.itstm.ru;
# HSTS (форсирование HTTPS на 1 год включая поддомены и Preload)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Защита от Clickjacking (запрет встраивания в iframe)
add_header X-Frame-Options "SAMEORIGIN" always;
# Защита от MIME-sniffing
add_header X-Content-Type-Options "nosniff" always;
# Контроль передачи Referer
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Ограничение доступа к API браузера (камера, микрофон, геолокация)
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
# Базовая строгая политика CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:;" always;
}2. Настройка заголовков безопасности в Apache
В файле VirtualHost или .htaccess:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data:;"
</IfModule>3. Проверка заголовков ответа
curl -I https://secure.itstm.ru Частые вопросы (FAQ)
В чем опасность добавления директивы 'preload' в заголовок HSTS?
Если вы отправите домен в список HSTS Preload List Google/Mozilla, браузеры будут жестко требовать валидный SSL-сертификат. Если сертификат просрочится или сайт вернется на HTTP, открыть сайт будет невозможно до исключения из глобального списка (занимает месяцы).
Как протестировать CSP без блокировки контента на сайте?
Используйте заголовок Content-Security-Policy-Report-Only. Браузер не будет блокировать скрипты, а только отправит отчеты об ошибках на указанный report-uri.