Сбор JS score

Как включить расчёт bot score для указанного трафика.

Рекомендуем настроить сбор JS score для всех страниц, которые пользователь открывает в браузере. Это поможет вам получить контроль над жёсткостью фильтрации и не несёт никаких минусов, в том числе не ухудшает UX.

Доступно только для режима защиты Антибот.

Подключается по запросу. Если внутри Пользовательских правил в UI вкладка «Сбор JS score» неактивна, напишите в поддержку — откроем её для вас.

О группе правил

Описание

Сбор JS score — группа правил, с помощью которой вы задаёте, для какого трафика нужно выполнить две операции:

  1. Выдать JS-челлендж — отправить источнику запроса специальный скрипт, который соберёт параметры его браузерного окружения.

  2. Для источника, выполнившего JS-челлендж, рассчитать JS score — число от 0 до 1, которое показывает, насколько источник похож на бота.

В нашем UI вы также можете встретить термин «bot score». Это то же самое, что и JS score. Дальше в статье используем bot score.

Чем это полезно

Вы сможете управлять жёсткостью фильтрации трафика. Как это работает:

  1. Вы задаёте настройки:

    • Правила сбора JS score — указываете, для какого трафика нужно рассчитывать bot score.

    • Правила классификации ботов — указываете пороговое значение bot score. Источники, чей bot score равен порогу или выше, будут признаны ботами. Для разного трафика можно задать разный порог и таким образом где-то сделать фильтрацию мягче, а где-то жёстче.

  2. Пользователи отправляют запросы к вашему ресурсу.

  3. Встретив запрос, который попадает под ваши правила сбора JS score, система проверяет, проходил ли его источник (клиент) недавно JS-челлендж:

    • если проходил, будет использован уже рассчитанный ранее bot score;

    • если не проходил, в ответ на запрос выдаётся JS-челлендж.

      Исключение: обелённому трафику (например, запросам от IP из белого списка) JS-челлендж не выдаётся и bot score не рассчитывается. Такой трафик сразу пропускается на ресурс, без дополнительных проверок.
  4. Источник запроса проходит JS-челлендж:

    • если смог пройти, система рассчитывает его bot score;

    • если не смог пройти, система сразу блокирует запрос.

  5. Система сравнивает получившийся bot score источника с установленным вами пороговым значением. Если bot score:

    • Ниже порога — фильтр пройден. Система проверит запрос другими политиками фильтрации и, если всё хорошо, пропустит на ваш ресурс.

    • Равен порогу или выше — источник считается ботом. Система заблокирует запрос от него, если ситуация не входит в набор исключений.

      Список исключений
      • Запрос попал под созданное вами правило защиты. В настройках правила вы сами указываете, что нужно сделать с таким запросом — пропустить, заблокировать, выдать cookie-челлендж, выдать JS-челлендж или выдать CAPTCHA.

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

FAQ

Почему сбор JS score не ухудшает UX?

JS-челлендж занимает доли секунды, не отображается в UI и проходится браузером автоматически. Пользователь не отличит загрузку страницы с JS-челленджем от загрузки без него.

Что такое JS-челлендж?

JS-челлендж — страница с JavaScript-кодом, который содержит небольшую математическую задачу, а также собирает характеристики окружения:

  • размер окна браузера,

  • характеристики видеокарты,

  • наличие виртуализации,

  • поддержка и работа различных браузерных API,

  • и другие.

Источник запроса должен прислать верный ответ на задачу — тогда JS-челлендж считается пройденным. Вместе с этим ответом придут характеристики окружения. Система их проанализирует и рассчитает bot score источника.

Что будет, если источник запроса не прошёл JS-челлендж?

Система заблокирует его запрос.

Что такое bot score?

Bot score — числовая оценка того, насколько источник запроса похож на бота, то есть насколько его технические и поведенческие признаки похожи на признаки автоматизации.

Какие значения принимает bot score, что они значат?

От 0 до 1 с шагом 0.1:

  • 0 — нет признаков автоматизации.

  • От 0.1 до 0.9 — есть признаки автоматизации. Чем выше значение, тем больше признаков.

  • 1 — очевидная автоматизация.

0.5 можно условно считать средним значением.

Как система рассчитывает bot score?

Процесс состоит из пяти этапов:

  1. Пользователь отправляет запрос.

  2. Система анализирует телеметрию запроса на уровнях L3/L4–L7: оценивает, как запрос проходит по сети, как устанавливается соединение и что передаётся внутри HTTP. Эти данные понадобятся позже.

    Примеры параметров
    • Признаки статистических аномалий

    • Репутация источника запроса

    • HTTP-параметры запроса

    • Параметры TLS-соединения

    • Другие признаки, которые помогают понять характер трафика

  3. Система отправляет пользователю JS-челлендж — страницу с JavaScript-кодом, который выдаёт браузеру небольшую математическую задачу и собирает характеристики клиентского окружения.

    Примеры характеристик окружения
    • Размер окна браузера

    • Характеристики видеокарты

    • Наличие виртуализации

    • Поддержка и работа различных браузерных API

    Обелённому трафику (например, запросам от IP из белого списка) JS-челлендж не выдаётся и bot score не рассчитывается. Такой трафик сразу пропускается на ресурс, без дополнительных проверок.
  4. Браузер пользователя выполняет JavaScript-код: отправляет ответ на задачу и собранные характеристики окружения.

  5. Система проверяет ответ.

    Если ответ не пришёл или оказался неверным, bot score не формируется: система сразу заблокирует запрос.

    Если ответ верный, система анализирует характеристики клиентского окружения и сопоставляет их с информацией, полученной на шаге 2. На основании всех собранных данных вычисляет bot score источника.

Когда bot score сформирован, система сравнивает его с порогом, который вы установили на вкладке «Классификация ботов». Если значение равно порогу или выше, источник будет помечен как «бот».

Для всех ли источников рассчитывается bot score?

Нет, только для тех, кто получил от системы защиты JS-челлендж и успешно его прошёл.

Если не настроить сбор JS score, будет ли система всё равно рассчитывать bot score для каких-нибудь источников запроса?

Да, но лишь для небольшой доли всего трафика.

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

Если источник уже проходил JS-челлендж и получил bot score, придётся ли ему делать это повторно?

Если результат bot score «свежий» (получен недавно) — нет.

В этом случае система просто использует уже рассчитанное значение. Например, если пользователь в течение короткого промежутка времени посетит несколько страниц, на которых настроен сбор JS score, JS-челлендж будет ему выдан только на первой.

Рекомендации

  • Включите сбор JS score на всех страницах, которые пользователь открывает в браузере. Это даст вам контроль над жёсткостью фильтрации и при этом не несёт никаких минусов.

  • Не включайте сбор JS score для AJAX-локаций. В случае с AJAX инициатор обращения — JavaScript-код, который ждёт определённый формат ответа. Получив вместо него JS-челлендж, код не сможет его корректно обработать и выполнить нужное действие.

  • Не включайте сбор JS score для URL, обращение к которым происходит НЕ через браузер: например, для API, к которому должны обращаться сторонние системы. Дело в том, что источник запроса должен уметь обрабатывать JS-скрипт, но многие автоматизации не ожидают JS в качестве ответа. В результате они могут не пройти JS-челлендж и быть заблокированы. Это нарушит работу вашего ресурса.

  • После включения правила сбора JS score проверьте его работу через Логи запросов. Убедитесь, что JS-челлендж не мешает работе ваших интеграций и другой полезной автоматизации.

  • Используйте Классификацию ботов, чтобы установить порог bot score, начиная с которого система будет считать источник ботом.

  • Если хотите сами указать, что система должна делать с трафиком от ботов (блокировать, пропускать или выдавать одну из проверок), настройте Правила защиты.

Настройка

Открыть «Сбор JS score»

Перейдите в раздел Защита приложений → Ресурсы. Напротив нужного ресурса нажмите на многоточие () и выберите Пользовательские правила. Откроется раздел, где вы найдёте вкладку Сбор JS score.

Создать правило сбора JS score

  1. Нажмите + Создать правило сбора JS score. Откроется окно для создания правила, остальные шаги выполняйте в нём.

  2. Задайте Позицию и Описание.

    Настройка позиции и описания

    Позиция — место правила в списке. Она помогает упорядочить правила в UI, но никак не влияет на их работу. Можно задать любой номер на ваш выбор.

    Описание — название правила, которое вы создаёте. Советуем написать здесь, для какого трафика настраиваете правило. Пример: Страница входа.

  3. Настройте Условия.

    Включайте сбор JS score только для страниц, которые пользователь открывает в браузере.

    Можно задать два типа условий:

    • трафик — какими характеристиками должен обладать запрос, в ответ на который нужно выдавать JS-челлендж и рассчитывать bot score источника;

    • статус DDoS-атаки — должна ли механика сбора JS score быть привязана к тому, идёт сейчас DDoS-атака на ваш ресурс или нет.

    Сбор JS score сработает для запросов, которые соответствуют всем условиям одновременно. Пример: вы указали в условиях по трафику Страна — Россия и Путь URL начинается с /login, а статус DDoS-атаки — Во время DDoS-атаки. Защита проверит:

    • Запрос пришёл от IP из России?

    • Запрос направлен к /login?

    • Сейчас идёт DDoS-атака?

    Если на все три вопроса ответ «да», защита выдаст JS-челлендж и рассчитает bot score источника. Если хотя бы одно условие не выполнено, то не сделает этого.

    • Трафик

    • Статус DDoS-атаки

    Пример настроек для трафика

    Чтобы добавить условие, нажмите + Добавить условие, выберите параметр (например, Путь URL), выберите оператор сравнения (например, начинается с) и укажите значение (например, /login).

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

    Описание работы с каждым параметром
    Название параметра Описание параметра Требования к значению Пример условия

    Страна

    Географическое местоположение IP источника

    Выберите значение из выпадающего списка

    Страна в Russian Federation

    Query string

    Параметры, которые указаны в URL после знака ?

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Можно указать только ключ или пару «ключ-значение».

    • Длина строки — от 1 до 200 символов.

    • Не начинайте строку с пробела, символа / или ?.

    • Используйте только символы, допустимые для URL.

    • Указывайте специальные символы в формате percent-encoding. Например, вместо / укажите %2F.

    Query string содержит debug=true

    Путь URL

    Путь URL запроса (часть URL после домена и до знака ?)

    • Всегда начинайте строку с символа /.

    • Не указывайте доменное имя, например site.com.

    • Не указывайте протокол, например https://.

    • Не добавляйте параметры после знака ?.

    • Используйте только символы, допустимые для URL.

    Путь URL начинается с /admin

    Сегмент пути URL

    Любая часть пути URL

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — от 1 до 200 символов.

    • Можно указать любую часть пути: название раздела (api), расширение (.php) или даже набор символов из середины адреса (1/use).

    • Используйте только символы, допустимые для URL.

    Сегмент пути URL содержит backup

    Content-Type

    Формат передаваемых в запросе данных, например: JSON, обычный текст, изображения или данные из веб-форм

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — от 1 до 200 символов.

    • Не начинайте строку с пробела.

    • Укажите тип целиком или его часть.

    Content-Type равно application/json

    Cookie_any (или)

    Имена и значения cookie-файлов (правило сработает при наличии в запросе хотя бы одной из указанных связок «имя + значение»)

    • Можно добавить до 100 связок «имя + значение» в одно условие (используйте кнопку + Или).

    • Длина имени — до 200 символов.

    • Длина значения — до 4096 символов.

    Имя равно user_type

    Значение начинается с premium

    ИЛИ

    Имя равно partner_id

    Значение равно any

    Cookie_all (и)

    Имена и значения cookie-файлов (правило сработает при наличии в запросе всего набора указанных связок «имя + значение» одновременно)

    • Можно добавить до 100 связок «имя + значение» в одно условие (используйте кнопку + И).

    • Длина имени — до 200 символов.

    • Длина значения — до 4096 символов.

    Имя равно promo_code

    Значение равно active

    И

    Имя равно is_subscriber

    Значение равно yes

    Заголовок

    Имена и значения HTTP-заголовков

    Особенности параметра
    • Для разных заголовков действует логика И: запрос должен содержать все указанные пары «имя + значение».

    • Для нескольких значений одного заголовка действует логика ИЛИ: достаточно совпадения с любым из них.

    • Эти условия работают одновременно: для разных заголовков действует И, для нескольких значений одного — ИЛИ.

    Пример. Вы указали заголовки X-Env: prod, X-Region: ru и X-Region: us. Если запрос содержит:

    • X-Env: prod и X-Region: ru — правило сработает

    • X-Env: prod и X-Region: us — правило сработает

    • только X-Env: prod — не сработает

    • только X-Region: ru — не сработает

    • Можно добавить до 100 связок «имя + значение» в одно условие (используйте кнопку + Или).

    • Длина имени — до 200 символов.

    • Длина значения — до 200 символов.

    Имя равно X-App-Version

    Значение начинается с 2.0

    Имя хоста

    Значение заголовка Host (доменное имя сервера, к которому обращается клиент)

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — до 200 символов.

    • Не начинайте строку с пробела.

    • Укажите домен целиком или его часть.

    • Не указывайте протокол, например https://.

    • Не указывайте путь, например /main.

    Имя хоста равно api.site.com

    Хостинговая подсеть

    Трафик с IP-адресов, которые принадлежат хостинг-провайдерам или дата-центрам

    Не задаются

    Метод запроса

    Тип используемого HTTP-метода

    Выберите из выпадающего списка один или несколько методов

    Метод запроса в POST

    Referer

    Значение заголовка Referer — то есть адрес страницы, с которой пользователь перешёл на ваш ресурс

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — до 200 символов.

    • Укажите полный URL-адрес, домен или его часть.

    • Не начинайте строку с пробела.

    • Используйте только символы, допустимые для URL.

    Referer начинается с google.com

    ASN

    Номер автономной системы (ASN), которой принадлежит IP источника

    • Используйте число с префиксом AS (например, AS13335 или as13335).

    • Длина номера должна составлять от 1 до 10 цифр.

    • В одном поле можно указать до 100 уникальных номеров.

    • Один и тот же номер не может быть указан одновременно в списках в и не в.

    ASN в AS13238

    Хэши

    Уникальный «цифровой отпечаток» устройства (хэш), одного из трёх уровней точности на выбор: Servicepipe hash (loose), Servicepipe hash (medium) или Servicepipe hash (strict)

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Значение должно быть положительным числом от 1 до 200 символов.

    Servicepipe hash (strict) в 1234567890

    Запрос от нового пользователя

    Трафик от пользователей, которые зашли на ресурс впервые и чей «цифровой отпечаток» (хэш) пока не зафиксирован в нашей базе

    Не задаются

    Исходные подсети

    IP-адрес или подсеть отправителя

    • Можно добавить до 200 значений в одно условие (используйте кнопку + Или).

    • Укажите конкретные IP-адреса или их диапазоны (подсети).

    • Можно указывать адреса форматов IPv4 (например, 192.168.1.1) и IPv6 (например, 2001:db8::1).

    • Для указания диапазонов используйте формат CIDR — запись со слэшем (например, /24 для всей сети или /32 для одного адреса).

    Исходные подсети в 192.168.1.0/24 или 2001:db8::1

    User-Agent

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

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — до 200 символов.

    • Не начинайте строку с пробела.

    • Используйте нужный регистр (например, Chrome и chrome — это разные значения).

    User-Agent равно BadBot/1.0

    X-Forwarded-For

    Значение заголовка X-Forwarded-For (цепочка IP-адресов прокси-серверов, через которые прошёл запрос до попадания на ваш ресурс)

    • Можно добавить до 100 значений в одно условие (используйте кнопку + Или).

    • Длина значения — до 200 символов.

    • Не начинайте строку с пробела.

    • Укажите конкретные IP-адреса или их диапазоны.

    X-Forwarded-For содержит 203.0.113.10

    Tor (The Onion Router)

    Трафик из сети Tor, которая скрывает реальный IP-адрес источника

    Не задаются

    Описание операторов
    Набор операторов зависит от выбранного параметра.
    Оператор Когда сработает правило

    равно

    При полном совпадении значения.

    Пример: вы указали Путь URL равно /login. Правило сработает для запроса к /login, но не сработает для запроса к любому другому пути — в том числе и к вложенному вроде /login/reset.

    не равно

    Если значение не совпадает с указанным.

    Пример: вы указали Имя хоста не равно api.example.com. Правило сработает для запросов к другим хостам — например, example.com, www.example.com или admin.example.com. А для запросов к api.example.com не сработает.

    содержит

    Если значение содержит указанную последовательность символов.

    Пример: вы указали Query string содержит debug=true. Правило сработает только для запросов, где среди параметров есть debug=true — например, ?id=10&debug=true. Последовательность должна быть точной: если вместо debug=true в параметрах стоит что-то похожее, но не идентичное (например, degub=true или debug=treu), правило не сработает.

    не содержит

    Если значение не содержит указанную последовательность символов.

    Пример: вы указали Content-Type не содержит json. Правило сработает для запроса с любым значением заголовка без «json»: например, text/plain, application/xml, multipart/form-data и других. А вот для application/json, application/ld+json и подобных не сработает.

    начинается с

    Если значение начинается с указанной последовательности символов.

    Пример: вы указали Путь URL начинается с /admin. Правило сработает для запросов к /admin и ко всем вложенным путям: /admin/users, /admin/access и другим.

    не начинается с

    Если значение не начинается с указанной последовательности символов.

    Пример: вы указали Имя хоста не начинается с api. Правило сработает для запросов к хостам example.com, www.example.com, admin.example.com и другим, названия которых не начинаются с api. А для api.example.com или api-test.example.com не сработает.

    заканчивается на

    Если значение заканчивается указанной последовательностью символов.

    Пример: вы указали Сегмент пути URL заканчивается на .php. Правило сработает для значений login.php, index.php и profile.php. А для login.html, index.js или php-login не сработает: указанная последовательность должна находиться именно в конце значения.

    не заканчивается на

    Если значение не заканчивается указанной последовательностью символов.

    Пример: вы указали X-Forwarded-For не заканчивается на 10. Правило сработает для запросов, в которых значение заголовка заканчивается на другие символы, например 192.0.2.15 или 198.51.100.25. А для значений 192.0.2.10, 203.0.113.10 и других, заканчивающихся на 10, правило не сработает.

    в

    Если значение входит в указанный список.

    Пример: вы указали Метод запроса в GET, POST. Правило сработает для запросов с одним из этих методов. Для запросов с методами PUT, DELETE, PATCH и другими, которых нет в списке, правило не сработает.

    не в

    Если значение не входит в указанный список.

    Пример: вы указали Страна не в Russian Federation, Belarus. Правило сработает для запросов из всех стран, кроме России и Беларуси.

    пустое

    Если у параметра нет значения.

    Пример: вы указали Content-Type пустое. Правило сработает для запросов, в которых заголовок Content-Type не передан. Если заголовок есть и содержит любое значение, например application/json или text/plain, правило не сработает.

    не пустое

    Если у параметра есть значение.

    Пример: вы указали Content-Type не пустое. Правило сработает для запросов, в которых заголовок Content-Type содержит любое значение, например application/json или text/plain. Если заголовок не передан, правило не сработает.

    любое

    При любом значении параметра.

    Пример: вы указали Cookie_all (и): Имя — session, Значение — любое. Правило сработает при наличии cookie session с любым значением. Если cookie с таким именем в запросе нет, правило не сработает.

    Настройки статуса DDoS-атаки

    Выберите, когда должно работать правило: всегда, пока нет DDoS-атаки или во время DDoS-атаки.

  4. Нажмите Создать.

    Правило появится в общем списке на вкладке Сбор JS score. Чтобы оно начало работать, нажмите на переключатель в столбце Включено: он должен загореться зелёным.

    Включение и отключение правила

Пример настройки

Задача: собрать bot score источников, которые открывают страницы каталога.

Настройка:

  1. Описание правила: Каталог.

  2. Условия для трафика:

    • переменная: Путь URL,

    • оператор: начинается с,

    • значение: /catalogue/.

  3. Статус DDoS-атаки: Всегда.

Защита будет выдавать JS-челлендж для запросов к каталогу. После прохождения рассчитает bot score источника.

Управление

На вкладке Сбор JS score можно управлять правилами прямо из списка:

  • Переместить: используйте иконку с шестью точками (), чтобы изменить позицию правила в списке. Это действие только меняет порядок отображения правила в UI и не влияет на его работу.

  • Посмотреть детали: используйте иконку >, чтобы увидеть все условия правила, не заходя в режим редактирования.

  • Включить/выключить: используйте переключатель в столбце Включено. Зелёный цвет значит, что правило работает и собирает bot score, серый — что оно неактивно.

  • Редактировать: нажмите на многоточие () в конце строки и выберите Редактировать. Здесь вы сможете изменить любые параметры правила.

  • Удалить: нажмите на многоточие (), выберите Удалить и подтвердите действие. Восстановить удалённое правило невозможно.

Действия над правилами