Заголовки безопасности
Несколько строк в ответе сервера, которые говорят браузеру, чего странице делать нельзя: не угадывать тип файла, не открываться во фрейме на чужом домене, не отдавать посторонним весь адрес страницы.
Отправляются сами. Настраиваются в Система → Системные настройки → Безопасность.
Что уходит сразу после установки
Эти три включены по умолчанию, потому что не ломают ничего:
| Заголовок | Значение | Что делает |
|---|---|---|
X-Content-Type-Options | nosniff | Браузер не угадывает тип файла по содержимому. Загруженная «картинка», внутри которой скрипт, останется картинкой |
X-Frame-Options | SAMEORIGIN | Сайт нельзя открыть во фрейме на чужом домене — защита от кликджекинга |
Referrer-Policy | strict-origin-when-cross-origin | Чужой сайт видит, что переход пришёл с вашего домена, но не с какой именно страницы |
Пустое значение настройки означает «этот заголовок не отправлять».
Почему включено сразу, а не оставлено на ваше усмотрение
Заголовок, который надо пойти и включить, на большинстве сайтов не включат никогда. Поэтому безопасный набор работает из коробки, а осознанного решения требует только то, что способно сломать сайт.
Что включается вручную
Эти три выключены не для приличия: каждый умеет положить рабочий сайт.
HSTS
Говорит браузеру, что сайт доступен только по https, и на сколько секунд это запомнить.
Браузер запомнит надолго, и отыграть назад нельзя
Включив HSTS на год, вы получаете год, в течение которого браузеры посетителей будут отказываться открывать сайт по http. Протух сертификат, отвалился https на поддомене, переехали на другой хостинг — человек увидит не страницу, а ошибку, и обойти её сам не сможет.
Включайте, когда https работает на всём сайте и вы в нём уверены. Начните с суток (86400) и увеличивайте.
По http заголовок не отправляется вовсе: там он бессмыслен и опасен.
Content-Security-Policy
Перечисляет, откуда странице разрешено грузить скрипты, стили, картинки и шрифты.
Ломает инлайновые скрипты и чужие виджеты
Первое же включение выключит счётчики, чаты, карты и всё, что вставлено тегом <script> прямо в разметку. Политику подбирают на копии сайта, глядя в консоль браузера: она покажет каждый заблокированный источник.
Permissions-Policy
Запрещает возможности браузера, которые сайту не нужны:
geolocation=(), microphone=(), camera=()Сначала посмотрите, что на сайте есть
Запрет geolocation ломает карту, которая показывает посетителю, где он. Поэтому настройка пустая: список зависит от сайта, а не от общих соображений.
Чужой заголовок не перезаписывается
Если заголовок уже отправил веб-сервер или сам сайт, компонент его не трогает. Настройку в nginx или .htaccess можно оставить как есть — конфликта не будет, победит она.
Чем это отличается от типов содержимого MODX
У MODX есть своё поле для заголовков — Система → Типы содержимого. Оно работает, и его никто не отменяет.
Разница в охвате. Тип содержимого действует на ресурсы MODX. Настройки компонента — на всё, что отдаёт сайт, включая виртуальные страницы и ресурсы вне дерева: у них своего типа содержимого нет, и заголовки им иначе не достались бы.
Как проверить
curl -sI https://ваш-сайт.ру | grep -i 'x-frame\|x-content\|referrer\|strict-transport'Или вкладка «Сеть» в инструментах разработчика — заголовки ответа для самого документа, а не для картинок и скриптов.