Безопасность

Заголовки безопасности

Оцените ваши HTTP-заголовки безопасности — CSP, HSTS, X-Frame-Options и другие.

О инструменте «Заголовки безопасности»

Оценивает HTTP security-заголовки сайта — Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и другие — по текущим лучшим практикам и сообщает, что присутствует, отсутствует или неверно настроено. Отсутствующие security-заголовки — одна из самых частых и легко исправимых находок базового аудита безопасности. Оценка разбита по заголовкам, а не сведена в один непрозрачный балл, поскольку каждый заголовок решает свою задачу — HSTS предотвращает даунгрейд протокола, X-Frame-Options защищает от clickjacking, CSP ограничивает, что может загрузить страница.

Высокий балл здесь — это эшелонированная защита, а не замена исправлению самих уязвимостей, от которых эти заголовки защищают: CSP и X-Frame-Options снижают ущерб от XSS или clickjacking-уязвимости, но не устраняют саму уязвимость в коде приложения.

📖 Подробнее в базе знаний →

Рекомендуемые значения

ЗаголовокХорошее стартовое значение
Strict-Transport-Securitymax-age=31536000; includeSubDomains
Content-Security-PolicyЗависит от сайта. Начните с генератора CSP.
X-Content-Type-Optionsnosniff
X-Frame-OptionsDENY или SAMEORIGIN (либо frame-ancestors в CSP)
Referrer-Policystrict-origin-when-cross-origin
Permissions-Policycamera=(), microphone=(), geolocation=() для функций, которыми сайт не пользуется
Cross-Origin-Opener-Policysame-origin; если ломаются всплывающие окна входа — same-origin-allow-popups
Cross-Origin-Resource-Policysame-site. Осторожно с ресурсами, которые должны встраивать другие сайты.

Заголовки, от которых можно отказаться

X-XSS-Protection устарел: современные браузеры его игнорируют, и сейчас рекомендуют не отправлять его вовсе или ставить 0. Expect-CT больше не используется. Версии программ в Server и X-Powered-By помогают только атакующим.

Где их задавать

  • nginx: add_header X-Content-Type-Options "nosniff" always; Осторожно: add_header внутри блока location заменяет все заголовки из блока server, и на части путей заголовки незаметно пропадают.
  • Apache: Header always set X-Content-Type-Options "nosniff"
  • За CDN заголовки можно добавлять и на его стороне — тогда они есть и в ответах из кэша.

Осторожно с HSTS

Увидев HSTS, браузер отказывается открывать домен по обычному HTTP, пока не истечёт max-age. Прежде чем добавлять includeSubDomains, убедитесь, что все поддомены работают по HTTPS. Если не уверены, начните с короткого max-age, например 300, а preload добавляйте, только когда полностью уверены: удаление из списка предзагрузки занимает месяцы.