← Cloudflare API Shield / api-shield / security / sequence-mitigation
Пользовательские правила Sequence Mitigation
Пользовательские правила последовательностей API Shield используют настроенный идентификатор сеанса чтобы отслеживать порядок запросов пользователя и время между ними, и предоставляет эти данные через Cloudflare Rules. Это позволяет писать правила, которые соответствуют допустимым или недопустимым последовательностям.
Эти правила похожи на правила последовательностей для cookie но имеют другой набор предварительных условий:
- Для них требуется идентификаторы сессий чтобы задать это в API Shield.
- Поскольку для этого нужны идентификаторы сессии, их можно применять только к трафику, который однозначно относится к конкретным пользователям благодаря идентификаторам сессии, то есть к аутентифицированному трафику.
- Поскольку Cloudflare хранит состояние пользователя в памяти, а не в cookie, время жизни последовательности сессии ограничено 10 минутами.
- Необходимо настроить хотя бы один Правило последовательности API чтобы включить систему последовательностей.
Правила, созданные с помощью этих пользовательских правил, аналогичны правилам последовательности, которые можно настроить через API или панель управления Cloudflare поскольку они используют одну и ту же базовую технологию. Однако эти пользовательские правила обеспечивают большую гибкость благодаря свободной логике поверх записанной последовательности и доступу ко всем вариантам ответа, которые предлагает rulesets.
Доступность
Эти поля последовательности доступны в:
- Custom rules (
http_request_firewall_customэтап) - Правила ограничения скорости (
http_request_ratelimit) - Bulk Redirects (
http_request_redirect) - Request Header Transform Rules (
http_request_late_transform)
| Название поля | Описание | Пример значения |
|---|---|---|
| Это поле содержит идентификатор операции, соответствующей текущему запросу. Если текущий запрос не соответствует ни одной операции, определённой в Endpoint Management, значением будет пустая строка. |
|
| Это поле содержит массив идентификаторов предыдущих операций в последовательности, упорядоченный от самой последней к самой ранней. Текущий запрос в него не включается. |
|
| Это поле содержит карту, в которой ключами являются идентификаторы операций, а значениями служит количество миллисекунд, прошедших с момента последнего выполнения этой операции. |
|
Создание пользовательского правила для последовательности
-
На панели управления Cloudflare перейдите к разделу Правила безопасности страницу.
Перейдите в Правила безопасности ↗ -
Чтобы создать новое пустое правило, выберите Создать правило > Custom rules.
-
Введите описательное название правила в Название правила.
-
В разделе Когда входящие запросы соответствуют, используйте Поле раскрывающемся списке отфильтруйте по Последовательности и выберите один из вариантов:
- Текущая операция
- Предыдущие операции
- Прошедшее время
-
В разделе Значение, нажмите значок редактирования, чтобы открыть Builder и создать последовательность на боковой панели.
-
В разделе Выберите имя хоста для этой последовательности, выберите все хосты или конкретное имя хоста из раскрывающегося списка. При необходимости можно воспользоваться строкой поиска, чтобы найти нужное имя хоста.
-
Из раздела Методы раскрывающемся списке выберите все методы или конкретный метод запроса.
-
Установите флажок для каждой конечной точки в том порядке, в котором они должны появляться в последовательности.
-
Задайте время выполнения.
-
Выберите Save.
-
В разделе Затем выберите действие, выберите действие правила в Выберите действие раскрывающемся списке. Например, если выбрать Block указывает Cloudflare отклонять запросы, соответствующие заданным вами условиям.
-
(Необязательно) Если вы выбрали Block действия можно настроить пользовательский ответ.
-
В разделе Расположите на, выберите порядок срабатывания правила.
-
Чтобы сохранить и развернуть правило, выберите Развернуть. Если вы ещё не готовы развернуть правило, выберите Save as Draft.
Примеры правил
У каждой сохранённой конечной точки на странице сведений в Endpoint Management отображается ID конечной точки в формате UUID. Приведённые ниже ссылки (aaaaaaaa, bbbbbbbb, а также cccccccc) являются первыми восемью символами ID конечной точки.
Посетитель должен подождать более 2 секунд после запроса конечной точки aaaaaaaa перед запросом конечной точки bbbbbbbb:
cf.sequence.current_op eq "bbbbbbbb" and
cf.sequence.msec_since_op["aaaaaaaa"] ge 2000Посетитель должен запросить конечные точки aaaaaaaa, затем bbbbbbbb, затем cccccccc именно в таком порядке:
cf.sequence.current_op eq "cccccccc" and
cf.sequence.previous_ops[0] == "bbbbbbbb" and
cf.sequence.previous_ops[1] == "aaaaaaaa"Посетитель должен запросить конечную точку aaaaaaaa до конечной точки bbbbbbbb, но конечная точка aaaaaaaa может находиться в любом месте среди предыдущих 10 запросов:
cf.sequence.current_op eq "bbbbbbbb" and
any(cf.sequence.previous_ops[*] == "aaaaaaaa")Посетитель должен запросить либо конечную точку aaaaaaaa до конечной точки bbbbbbbb, или конечная точка cccccccc до конечной точки bbbbbbbb:
(cf.sequence.current_op eq "bbbbbbbb" and
any(cf.sequence.previous_ops[*] == "aaaaaaaa")) or
(cf.sequence.current_op eq "bbbbbbbb" and
any(cf.sequence.previous_ops[*] == "cccccccc"))