Skip to content

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

Несколько строк в ответе сервера, которые говорят браузеру, чего странице делать нельзя: не угадывать тип файла, не открываться во фрейме на чужом домене, не отдавать посторонним весь адрес страницы.

Отправляются сами. Настраиваются в Система → Системные настройки → Безопасность.

Что уходит сразу после установки

Эти три включены по умолчанию, потому что не ломают ничего:

ЗаголовокЗначениеЧто делает
X-Content-Type-OptionsnosniffБраузер не угадывает тип файла по содержимому. Загруженная «картинка», внутри которой скрипт, останется картинкой
X-Frame-OptionsSAMEORIGINСайт нельзя открыть во фрейме на чужом домене — защита от кликджекинга
Referrer-Policystrict-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. Настройки компонента — на всё, что отдаёт сайт, включая виртуальные страницы и ресурсы вне дерева: у них своего типа содержимого нет, и заголовки им иначе не достались бы.

Как проверить

bash
curl -sI https://ваш-сайт.ру | grep -i 'x-frame\|x-content\|referrer\|strict-transport'

Или вкладка «Сеть» в инструментах разработчика — заголовки ответа для самого документа, а не для картинок и скриптов.

© PageBlocks 2019-present