Заголовки безопасности и доступ в админку - 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; # постоянный HTTPSadd_header X-Content-Type-Options "nosniff" always;add_header X-Frame-Options "SAMEORIGIN" always; # админке нужны свои фреймы# заголовки ставят один раз на сервер сайта, а не в каждом locationЗапретом фреймов управляют ровно одним инструментом. Защита от фреймов есть и в проактивной защите, и в конфигурации веб-сервера окружения; включённые оба разом дают два одинаковых заголовка и непредсказуемое поведение браузера.
Тип содержимого запрещает браузеру угадывать формат ответа. Загруженный файл с чужим расширением после этого не выполняется как скрипт, и одна из типовых атак через загрузку файлов закрывается целиком.
Включаем защиту от кликджекинга в панели:
COption::SetOptionString('security', 'clickjack_protection', 'Y');// если защита включена здесь, заголовок в конфигурации веб-сервера убирают// собственные фреймы сайта при этом добавляют в список разрешённыхПостоянный HTTPS начинают с короткого срока действия. Браузер запоминает требование ровно на указанное время, и ошибка в сертификате при годовом сроке закрывает сайт для вернувшихся посетителей надолго.
Политику содержимого добавляют последней и осторожно. Готовые шаблоны и визуальный редактор используют встроенные скрипты и стили, поэтому строгая политика ломает админку и часть витрины в первый же день; её вводят в режиме наблюдения и разбирают отчёты, прежде чем включать запрет.
Типичные проблемы
После включения постоянного HTTPS сайт открывается только по нему.
Это и есть смысл заголовка: браузер запоминает срок и больше не ходит по незащищённому адресу. Начинают с короткого срока, а не с года.
В админке перестали открываться всплывающие окна.
Запрет фреймов выставлен слишком строго. Административному разделу нужны свои фреймы, поэтому запрет ограничивают чужими источниками.
После обновления окружения правила доступа пропали.
Они были записаны в основной файл конфигурации веб-сервера. Свои правила держат отдельным файлом в каталоге подключаемых конфигов.
Часть сотрудников не попадает в админку.
Ограничение по адресу не учитывает мобильный интернет и работу из дома. Список адресов ведут вместе с ответственным и пересматривают.
Политика содержимого сломала визуальный редактор.
Строгая политика запрещает встроенные скрипты и стили, на которых работает редактор. Её вводят в режиме наблюдения и по отчётам.
Частые вопросы
Где задавать заголовки безопасности в веб-окружении?
В своём файле конфигурации веб-сервера, подключаемом к сайту: обновление окружения перезаписывает основные файлы. В административной панели платформы часть этих настроек тоже есть, и дублировать их не нужно.
Опасно ли включать постоянный HTTPS?
Опасно только при нерабочем сертификате: браузер запомнит требование и не пустит на сайт по незащищённому адресу. Поэтому начинают с короткого срока и увеличивают его после проверки.
Стоит ли закрывать админку по адресу?
Да, если у сотрудников постоянные адреса: это самая дешёвая защита от перебора паролей. Перед включением добавляют свой адрес в разрешённые и проверяют, каким файлом-флажком снимается ограничение при самоблокировке.
Нужна ли политика содержимого на обычном сайте?
Она полезна, но требует работы: тиражные шаблоны используют встроенные скрипты, и строгая политика их ломает. Начинают с режима наблюдения, разбирают отчёты и только потом включают запрет.
Как проверить, что заголовки действительно ставятся?
Запросом с показом заголовков ответа с самого боевого адреса. Настройки в панели и файлы конфигурации показывают намерение, а заголовок в ответе - результат.
Смежное
- Защита сайта - оглавление подтемы
- Проактивный фильтр: уровни защиты, исключения, ложные срабатывания - те же настройки со стороны фильтра
- Базовая защита сайта: обновления, доступы, проактивная защита - что делают до заголовков
- Защита входа: перебор паролей, картинка с кодом, второй фактор - вторая половина защиты админки
- SSL-сертификат в BitrixVM: выпуск, продление, перенос - без сертификата постоянный HTTPS включать нельзя
- Данные от посетителя: экранирование, проверка, сеанс - защита на уровне кода
- Безопасность - устройство защиты целиком