Правильная настройка заголовков HTTP-ответа — одно из самых недорогих улучшений безопасности веб-приложения. Несколько строк конфигурации существенно затрудняют целый класс атак на уровне браузера. Однако те же заголовки, настроенные неверно, способны нарушить работу продуктивной среды. В этой статье мы рассказываем, за что отвечает каждый заголовок и как внедрять их поэтапно.
Strict-Transport-Security (HSTS)
Сообщает браузеру: «подключайся к этому сайту только по HTTPS». После применения браузер отклоняет обычные HTTP-соединения при попытках перехвата трафика.
Обратите внимание: includeSubDomains и preload — мощные, но трудно отменяемые директивы. Не добавляйте includeSubDomains, пока не убедитесь, что все ваши поддомены работают по HTTPS. Начните с небольшого значения срока действия и увеличивайте его только после того, как убедитесь, что всё работает.
Content-Security-Policy (CSP)
Самый мощный заголовок и одновременно требующий наибольшей аккуратности. Он указывает браузеру, из каких источников разрешено загружать скрипты, стили и изображения. При правильной настройке CSP в значительной мере препятствует выполнению внедрённого скрипта.
Если сразу включить CSP в режиме принудительного применения, сайт перестанет работать корректно. Правильный путь таков:
- Сначала выкатите политику в режиме, который только собирает отчёты.
- По отчётам определите, какие ресурсы были бы заблокированы при реальном трафике.
- Сузьте политику с учётом этих наблюдений.
- Переходите в режим принудительного применения, лишь когда сайт работает без сбоев.
X-Frame-Options и frame-ancestors
Не позволяет скрытно встроить ваш сайт в чужую страницу, чтобы вынудить пользователя кликнуть не туда. Современный подход — обеспечивать ту же защиту директивой CSP frame-ancestors. Если передавать оба заголовка, будут охвачены как старые, так и новые браузеры.
X-Content-Type-Options
У этого заголовка единственное значение: он отключает попытки браузера угадать тип содержимого. В ряде случаев такое угадывание приводит к неверной интерпретации вредоносного содержимого. Побочных эффектов практически нет, заголовок можно применять без опасений.
Referrer-Policy и Permissions-Policy
Referrer-Policy определяет, какой объём сведений об адресе передаётся при переходе на другие сайты. Permissions-Policy ограничивает доступ к возможностям браузера, таким как камера и геолокация. Оба заголовка сужают поверхность, значимую для конфиденциальности, и несут низкий риск.
План поэтапного внедрения
- Начните с заголовков без побочных эффектов:
X-Content-Type-Options,Referrer-Policy. - Добавьте защиту от встраивания во фреймы:
X-Frame-Optionsиframe-ancestors. - Включите HSTS с коротким сроком действия, проверьте работу, затем увеличьте срок.
- Запустите CSP в режиме отчётов, доработайте политику на реальном трафике и в последнюю очередь переведите её в режим принудительного применения.
Измеряйте, а не предполагайте
После изменений убедитесь, что заголовки действительно применяются. Введите свой домен в бесплатном тесте в разделе «Инструменты пентеста», чтобы получить оценку заголовков и увидеть все недостающие на одном экране.