HTTP security headers (заголовки безопасности) — специальные инструкции в ответе сервера, которые говорят браузеру, как безопасно работать с сайтом. Правильно настроенные заголовки блокируют XSS, clickjacking, sniffing. Несколько строк кода — большая защита.
1. Strict-Transport-Security (HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains
Говорит браузеру "всегда подключайся по HTTPS". Блокирует откат на HTTP и man-in-the-middle. Рекомендуется 1 год.
2. Content-Security-Policy (CSP)
Content-Security-Policy: default-src 'self'
Самый мощный, но сложный. Определяет, из каких источников можно загружать (скрипты, картинки, стили). Почти полностью блокирует XSS.
3. X-Frame-Options
X-Frame-Options: SAMEORIGIN
Блокирует размещение вашего сайта в iframe другого сайта (clickjacking).
4. X-Content-Type-Options
X-Content-Type-Options: nosniff
Блокирует "угадывание" типа файла браузером. Загруженный .txt не запустится как JS.
5. Referrer-Policy
Referrer-Policy: strict-origin-when-cross-origin
Ограничивает, сколько данных (referrer) отправляется при переходе на другой сайт.
6. Permissions-Policy
Permissions-Policy: geolocation=(), microphone=(), camera=()
Ограничивает доступ сайта к камере, микрофону, геолокации.
Установка в Apache (.htaccess)
<IfModule mod_headers.c>
Header always set X-Frame-Options "SAMEORIGIN"
</IfModule>
В Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
В PHP
header('X-Frame-Options: SAMEORIGIN');
Проверка
1) securityheaders.com — оценка (от A+ до F). 2) Mozilla Observatory. 3) DevTools → Network → Response Headers.
CSP осторожно
При слишком строгой настройке CSP может перестать работать ваш JS/CSS. Сначала протестируйте в режиме "Content-Security-Policy-Report-Only".
Опыт Сайт.uz
На Сайт.uz настроены HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и CSP. Оценка A на securityheaders.com.