Проактивный фильтр - уровни защиты, исключения, ложные срабатывания
Настраиваем проактивный фильтр: реакции на подозрительный запрос, уровни панели безопасности, доступ в админку по адресу и разбор ложных срабатываний.
Что нужно знать заранее
Проактивный фильтр разбирает входящие запросы и отсекает типовые атаки. Это второй эшелон защиты: он дополняет правильный код, но не заменяет ни экранирование, ни проверку прав в самом решении.
У фильтра есть несколько разных реакций на подозрительный запрос посетителя сайта. Данные можно обезвредить, очистить или пропустить как есть, а сверху добавить стоп-лист с таймаутом и запись в журнал вторжений.
Уровни защиты вложены друг в друга и берутся строго по порядку возрастания. Следующий уровень включают только после полной настройки предыдущего, иначе панель безопасности откатывает оценку к последнему полностью настроенному.
Шаги
- Включить проактивный фильтр и оставить стандартный уровень защиты вообще без исключений.
- Проверить формы сайта и убедиться, что фильтр не отсекает обычные данные.
- Пройти уровни панели безопасности строго по порядку, не перепрыгивая через ступени.
- Перед закрытием админки по адресу добавить свой сетевой адрес в разрешённые.
- Разбирать ложные срабатывания по журналу вторжений, а не отключать фильтр целиком.
Решение
Смотрим состояние фильтра и уровень защиты:
\Bitrix\Main\Loader::includeModule('security');printf("фильтр=%s\n", \COption::GetOptionString('security', 'filter_active'));printf("стоп-лист=%s\n", \COption::GetOptionString('security', 'filter_stop_list'));// уровень защиты целиком виден на панели безопасности в административной частиПанель безопасности показывает не одну галочку, а набор требований уровня. Пока не выполнены все пункты, уровень считается недостигнутым, и это нормальное поведение, а не ошибка настройки.
Разбираем ложное срабатывание по журналу:
SELECT TIMESTAMP_X, AUDIT_TYPE_ID, REMOTE_ADDR, DESCRIPTION FROM b_event_logWHERE AUDIT_TYPE_ID LIKE 'SECURITY%' ORDER BY ID DESC LIMIT 20;-- в журнале видно, какой запрос и по какому правилу отсеклиЖурнал вторжений отвечает на главный вопрос разбора: что именно не понравилось фильтру. Без него правка настроек превращается в перебор галочек с надеждой на удачу.
Добавляем исключение точечно:
// исключение задают для конкретной страницы или параметра, а не для всего сайта\Bitrix\Main\Loader::includeModule('security');$exceptions = \COption::GetOptionString('security', 'filter_mask');print_r(explode("\n", $exceptions)); // текущий список исключений фильтра// после правки списка формы проверяют заново, вместе с журналом вторженийИсключение делают минимальным по охвату: одна страница и одно конкретное поле. Выключенный фильтр «на время разбора» остаётся выключенным навсегда, и об этом вспоминают уже после взлома.
Готовим страховку перед закрытием админки по адресу:
touch /home/bitrix/www/bitrix/modules/ipcheck_disable_ЧАСТЬ_ИЗ_НАСТРОЕКls -la /home/bitrix/www/bitrix/modules/ | grep ipcheck # проверяем, что файл создан# файл-флажок снимает ограничение по адресу, если вы заблокировали сами себя# после восстановления доступа файл удаляют сразу: он открывает админку всемФайл-флажок создают заранее, а не когда доступ уже потерян. Имя берут из настроек модуля безопасности, а после восстановления доступа файл сразу удаляют: он открывает админку всем.
Проверяем заголовок защиты от фреймов:
curl -sI https://example.com/ | grep -i x-frame-optionscurl -sI https://example.com/ | grep -i x-content-type-options# два одинаковых заголовка от сайта и от веб-сервера дают непредсказуемое поведениеЗаголовком защиты от фреймов управляют из одного места. Если он приходит и от платформы, и от веб-сервера, браузер выбирает поведение сам, и результат отличается от ожидаемого.
Типичные проблемы
Форма перестала отправляться после включения защиты.
Фильтр посчитал содержимое поля подозрительным и очистил его ещё перед сохранением. Исключение добавляют точечно для этого поля, а не отключают фильтр целиком.
Уровень защиты не растёт, хотя настройки включены.
Не выполнены все требования уровня, и оценка откатилась к предыдущему полному уровню. Панель безопасности прямо показывает, каких именно пунктов этого уровня ещё не хватает.
Администратор заблокировал сам себя по адресу.
Свой сетевой адрес не добавлен в список разрешённых ещё до включения ограничения. Доступ возвращают заранее созданным файлом-флажком, имя которого лежит в настройках модуля.
Страница не открывается во фрейме у сервиса аналитики.
Включена защита от фреймов без исключений для нужных проекту внешних сервисов. Исключения задают там же в настройках сайта, где включена и сама защита.
Сайт отвечает ошибкой на чужой домен.
Домен не указан в списке хостов сайта на этой многосайтовой копии. Все домены проекта перечисляют в настройках, иначе запросы к ним отсекаются.
Частые вопросы
Заменяет ли фильтр правильный код?
Нет, он отсекает типовые атаки и не знает вашей бизнес-логики. Экранирование, проверка данных и права остаются работой разработчика.
Какой уровень защиты выбрать?
Стандартный подходит почти всем сайтам и не мешает работе. Высокий и выше берут там, где есть персональные данные и деньги, и настраивают по порядку.
Как понять, что фильтр мешает форме?
По журналу вторжений в момент отправки формы. Если запись есть, разбор идёт по правилу, из-за которого запрос отсекли.
Опасно ли добавлять исключения?
Точечное исключение для одного поля - разумный компромисс. Исключение для всего сайта равносильно выключенному фильтру.
Что делать после ложного срабатывания у покупателя?
Проверить журнал, добавить точечное исключение и убрать адрес покупателя из стоп-листа. Иначе он остаётся заблокированным до конца таймаута.
Смежное
-
Защита сайта - оглавление подтемы
-
Базовая защита сайта: обновления, доступы, проактивная защита - порядок закрытия дыр целиком
-
Заголовки безопасности и доступ в админку: HSTS, фреймы, адреса - заголовки и ограничение по адресу
-
Данные от посетителя: экранирование, проверка, сеанс - первый эшелон защиты в коде
-
Сайт взломан: признаки, разбор и порядок действий - если фильтр включили поздно
-
Журнал событий: чтение, очистка, свои записи - где лежат записи вторжений
-
Защита сайта на практике - раздел безопасности целиком
-
Вебхук от сервиса не доходит: разбор причин - когда фильтр режет чужие уведомления
-
Доступ запрещён и код 403: кто отдал отказ - когда стоп-лист закрывает доступ посетителю