INTEGRITY Документация

Пользовательские правила Sequence Mitigation

Пользовательские правила последовательностей API Shield используют настроенный идентификатор сеанса чтобы отслеживать порядок запросов пользователя и время между ними, и предоставляет эти данные через Cloudflare Rules. Это позволяет писать правила, которые соответствуют допустимым или недопустимым последовательностям.

Эти правила похожи на правила последовательностей для cookie но имеют другой набор предварительных условий:

Правила, созданные с помощью этих пользовательских правил, аналогичны правилам последовательности, которые можно настроить через API или панель управления Cloudflare поскольку они используют одну и ту же базовую технологию. Однако эти пользовательские правила обеспечивают большую гибкость благодаря свободной логике поверх записанной последовательности и доступу ко всем вариантам ответа, которые предлагает rulesets.

Доступность

Эти поля последовательности доступны в:

Название поляОписаниеПример значения

cf.sequence.current_op
String

Это поле содержит идентификатор операции, соответствующей текущему запросу. Если текущий запрос не соответствует ни одной операции, определённой в Endpoint Management, значением будет пустая строка.

c821cc00

cf.sequence.previous_ops
Array<String>

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

Если операция повторяется, она несколько раз отобразится в последовательности.

["f54dac32", "c821cc00", "a37dc89b"]

cf.sequence.msec_since_op
Map<Number>

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

Сюда не входит текущий запрос или операция, поскольку учитываются только предыдущие операции в последовательности.

{"f54dac32": 1000, "c821cc00": 2000}

Создание пользовательского правила для последовательности

  1. На панели управления Cloudflare перейдите к разделу Правила безопасности страницу.

    Перейдите в Правила безопасности ↗
  2. Чтобы создать новое пустое правило, выберите Создать правило > Custom rules.

  3. Введите описательное название правила в Название правила.

  4. В разделе Когда входящие запросы соответствуют, используйте Поле раскрывающемся списке отфильтруйте по Последовательности и выберите один из вариантов:

    • Текущая операция
    • Предыдущие операции
    • Прошедшее время
  5. В разделе Значение, нажмите значок редактирования, чтобы открыть Builder и создать последовательность на боковой панели.

  6. В разделе Выберите имя хоста для этой последовательности, выберите все хосты или конкретное имя хоста из раскрывающегося списка. При необходимости можно воспользоваться строкой поиска, чтобы найти нужное имя хоста.

  7. Из раздела Методы раскрывающемся списке выберите все методы или конкретный метод запроса.

  8. Установите флажок для каждой конечной точки в том порядке, в котором они должны появляться в последовательности.

  9. Задайте время выполнения.

  10. Выберите Save.

  11. В разделе Затем выберите действие, выберите действие правила в Выберите действие раскрывающемся списке. Например, если выбрать Block указывает Cloudflare отклонять запросы, соответствующие заданным вами условиям.

  12. (Необязательно) Если вы выбрали Block действия можно настроить пользовательский ответ.

  13. В разделе Расположите на, выберите порядок срабатывания правила.

  14. Чтобы сохранить и развернуть правило, выберите Развернуть. Если вы ещё не готовы развернуть правило, выберите 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"))