Перейти к содержимому

Заголовки безопасности и доступ в админку - HSTS, фреймы, адреса

Закрываем административный раздел от посторонних адресов и ставим заголовки ответа, которые закрывают типовые атаки на посетителя.

Решение

Смотрим, что сайт отдаёт сейчас:

Окно терминала
curl -sI https://example.org/ | grep -iE "strict-transport|x-frame|x-content-type|content-security"
# пусто - ни один из заголовков безопасности не выставлен
curl -sI -o /dev/null -w '%{http_code}\n' https://example.org/bitrix/admin/

Проверять нужно ответ сервера, а не настройки в панели. Заголовок, заданный в одном месте и перебитый в другом, выглядит настроенным ровно до первой такой проверки.

Ограничиваем административный раздел по адресу:

location ^~ /bitrix/admin/ {
allow 203.0.113.0/24; # адреса офиса и своего доступа
deny all;
# правило кладут отдельным файлом: обновление окружения перезапишет основной
}

Ограничение по адресу закрывает перебор паролей раз и навсегда. Плата - собственное неудобство: доступ из дома и с телефона придётся заводить отдельно либо оставлять вход через служебный канал.

То же самое умеет проактивная защита, и у неё есть спасательный круг. Перед включением свой адрес добавляют в разрешённые и запоминают имя файла-флажка: его создание в каталоге модулей снимает ограничение при самоблокировке.

Ставим заголовки ответа:

add_header Strict-Transport-Security "max-age=31536000" always; # постоянный HTTPS
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always; # админке нужны свои фреймы
# заголовки ставят один раз на сервер сайта, а не в каждом location

Запретом фреймов управляют ровно одним инструментом. Защита от фреймов есть и в проактивной защите, и в конфигурации веб-сервера окружения; включённые оба разом дают два одинаковых заголовка и непредсказуемое поведение браузера.

Тип содержимого запрещает браузеру угадывать формат ответа. Загруженный файл с чужим расширением после этого не выполняется как скрипт, и одна из типовых атак через загрузку файлов закрывается целиком.

Включаем защиту от кликджекинга в панели:

COption::SetOptionString('security', 'clickjack_protection', 'Y');
// если защита включена здесь, заголовок в конфигурации веб-сервера убирают
// собственные фреймы сайта при этом добавляют в список разрешённых

Постоянный HTTPS начинают с короткого срока действия. Браузер запоминает требование ровно на указанное время, и ошибка в сертификате при годовом сроке закрывает сайт для вернувшихся посетителей надолго.

Политику содержимого добавляют последней и осторожно. Готовые шаблоны и визуальный редактор используют встроенные скрипты и стили, поэтому строгая политика ломает админку и часть витрины в первый же день; её вводят в режиме наблюдения и разбирают отчёты, прежде чем включать запрет.

Типичные проблемы

После включения постоянного HTTPS сайт открывается только по нему.

Это и есть смысл заголовка: браузер запоминает срок и больше не ходит по незащищённому адресу. Начинают с короткого срока, а не с года.

В админке перестали открываться всплывающие окна.

Запрет фреймов выставлен слишком строго. Административному разделу нужны свои фреймы, поэтому запрет ограничивают чужими источниками.

После обновления окружения правила доступа пропали.

Они были записаны в основной файл конфигурации веб-сервера. Свои правила держат отдельным файлом в каталоге подключаемых конфигов.

Часть сотрудников не попадает в админку.

Ограничение по адресу не учитывает мобильный интернет и работу из дома. Список адресов ведут вместе с ответственным и пересматривают.

Политика содержимого сломала визуальный редактор.

Строгая политика запрещает встроенные скрипты и стили, на которых работает редактор. Её вводят в режиме наблюдения и по отчётам.

Частые вопросы

Где задавать заголовки безопасности в веб-окружении?

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

Опасно ли включать постоянный HTTPS?

Опасно только при нерабочем сертификате: браузер запомнит требование и не пустит на сайт по незащищённому адресу. Поэтому начинают с короткого срока и увеличивают его после проверки.

Стоит ли закрывать админку по адресу?

Да, если у сотрудников постоянные адреса: это самая дешёвая защита от перебора паролей. Перед включением добавляют свой адрес в разрешённые и проверяют, каким файлом-флажком снимается ограничение при самоблокировке.

Нужна ли политика содержимого на обычном сайте?

Она полезна, но требует работы: тиражные шаблоны используют встроенные скрипты, и строгая политика их ломает. Начинают с режима наблюдения, разбирают отчёты и только потом включают запрет.

Как проверить, что заголовки действительно ставятся?

Запросом с показом заголовков ответа с самого боевого адреса. Настройки в панели и файлы конфигурации показывают намерение, а заголовок в ответе - результат.

Смежное

Первоисточник