Каждый параметр - отдельный тест. Кластеризация по категориям.
На основе реального кода Яндекса (analytics.*.js)
Эти механизмы работают на стороне сервера и не могут быть протестированы в браузере. Но важно понимать, как они работают для полной картины детекции ботов. Описаны 4 серверных механизма: IP Type Detection, ML Features Analysis, Blocked Resources Analysis, Network Fingerprinting.
Как это работает: Яндекс анализирует IP-адрес пользователя и определяет его тип через:
Проверяется организация-владелец IP:
Проверяются заголовки, указывающие на прокси:
X-Forwarded-For: реальный IP клиента
X-Real-IP: реальный IP
Via: прокси-цепочка
Проверка IP в черных списках (Spamhaus, AbuseIPDB, Tor Exit Nodes)
Анализ паттернов использования IP:
⚠️ Почему нет клиентского теста: Проверка IP происходит на сервере через базы данных WHOIS и blacklist. Браузер не имеет доступа к информации о типе IP-адреса.
Как это работает: Яндекс использует ML-модель, которая анализирует более 100 параметров и сравнивает поведение с известными паттернами ботов и людей.
ML анализирует комбинации параметров:
// Человек
behaviorPattern: "human-like"
- Неравномерные интервалы между действиями
- Естественные траектории мыши
- Присутствуют ошибки и исправления
// Бот
behaviorPattern: "bot-like"
- Идеально регулярные интервалы
- Прямые линии движения мыши
- Нет ошибок, идеальная точность
Вычисляются статистические характеристики:
Пример: У человека интервалы между кликами: [850ms, 1200ms, 980ms] - большая дисперсия ✅
У бота: [500ms, 500ms, 500ms] - нулевая дисперсия 🚨
ML сравнивает поведение с известными примерами:
similarity: {
toKnownBots: 0.15, // 15% похоже на известных ботов
toKnownHumans: 0.85 // 85% похоже на людей ✅
}
Если похожесть на ботов > 0.7 → подозрительно
Если похожесть на людей > 0.8 → безопасно
ML находит необычные комбинации параметров:
⚠️ Почему нет клиентского теста: ML-модель работает на сервере Яндекса. Она анализирует комбинации всех параметров и сравнивает с обученной моделью. Клиент не может воспроизвести эту логику.
Как это работает: Monitoring System (static-mon.yandex.net) обнаруживает блокировщики рекламы и анализирует, какие ресурсы были заблокированы. Это помогает косвенно определить ботов.
Система определяет установленные блокировщики рекламы:
Всего поддерживается 12+ блокировщиков, включая Brave Browser, Firefox Tracking Protection, Kaspersky.
Система анализирует паттерны блокировки:
Отправляется на сервер в виде события:
{
"blocker": "ADBLOCK",
"element": "network resource (GET) https://example.com",
"blockedResource": {
"type": "NETWORK",
"url": "https://example.com",
"status": 0,
"method": "GET"
},
"labels": {
"browser": "Chrome",
"device": "desktop",
"blocker": "ADBLOCK"
}
}
Blocked Resources Analysis НЕ является прямым механизмом детекции ботов, но используется косвенно:
⚠️ Почему нет клиентского теста: Это косвенная серверная аналитика. Система собирает данные о заблокированных ресурсах и анализирует паттерны на сервере. Отдельный клиентский тест не требуется, так как детекция блокировщиков уже покрыта в других тестах.
Как это работает: Сетевой отпечаток — это уникальный набор характеристик сетевого трафика, позволяющий идентифицировать устройство, операционную систему или приложение на основе параметров сетевых протоколов.
Анализ параметров TCP/IP стека, уникальных для каждой ОС:
// Пример TCP fingerprint
{
windowSize: 65535,
mss: 1460,
options: ["MSS", "SACK", "Timestamp", "Window Scale"],
ttl: 64,
flags: "SYN",
os: "Linux/Windows/macOS/iOS" // Определяется по комбинации параметров
}
Анализ параметров TLS handshake для идентификации клиента:
// Пример TLS fingerprint
{
tlsVersion: "1.3",
cipherSuites: ["TLS_AES_256_GCM_SHA384", "TLS_CHACHA20_POLY1305_SHA256"],
extensions: ["server_name", "supported_groups", "key_share"],
browser: "Chrome 120 / Firefox 121 / Safari 17" // Определяется по комбинации
}
Анализ параметров HTTP/2 соединения:
Анализ временных характеристик сетевого трафика:
Пример: Боты из датацентров часто имеют стабильный низкий RTT (5-20ms), в то время как домашние пользователи имеют более высокий и переменный RTT (30-200ms).
Network fingerprinting помогает определить:
Network fingerprinting используется на сервере для дополнительной проверки:
⚠️ Почему нет клиентского теста: Network fingerprinting анализируется на сервере при установке соединения.
Браузер не имеет доступа к информации о TCP/IP параметрах или TLS handshake на уровне, достаточном для полного анализа.
Некоторые параметры (RTT, Connection Type через Network Information API) доступны клиенту и уже покрыты тестом
test-connection-type.html.
Все четыре механизма (IP Type Detection, ML Features Analysis, Blocked Resources Analysis, Network Fingerprinting) работают на стороне сервера и интегрируются с клиентскими данными. Они дополняют клиентские тесты, но сами не могут быть протестированы в браузере, так как требуют серверных баз данных, ML-моделей и аналитики.
Все клиентские параметры, которые собираются для этих механизмов, уже покрыты существующими тестами
(например, RTT и Connection Type через test-connection-type.html).
Всего: 56 модульных теста (28 базовых + 5 Realty + 1 Battery + 6 Browser/OS/Permissions/Audio/AudioFingerprint/Mouse/CPU + 4 Search + 2 SmartCaptcha + 4 Monitoring System + 5 новых: Request Chain, Calibration, Assistive, CPU Factor, Device Sensors)
Создано на основе анализа систем Яндекса
6 декабря 2024
нормализованный_вес = исходный_вес × (100 / сумма_всех_весов)| JS Файл / Документ | URL / Страница | Вес / Описание |
|---|---|---|
browser-light.browser.core_marketfront_CaptchaService.*.js |
market.yandex.ru | Формула suspicionScore с весами: клики 20%, регулярность 15%, мышь 15%, скролл 10%, UA 15%, JS 10%, idle 10%, IP 5% |
browser-light.browser.analytics.*.js |
market.yandex.ru | Baobab аналитика: структура событий, пороги детекции, веса поведенческих параметров |
default.index.client.*.js |
realty.yandex.ru | Gate API Event Logger: веса для Connection Type (cn), WebView (wv), Screen Keyboard (sk), Network Fingerprint |
static-mon.yandex.net/static/main.js |
translate.yandex.ru, pogoda.yandex.ru, images.yandex.ru | Monitoring System: веса для Pixel Ratio, Online Status, Iframe Detection, Smart TV, ad blocker detection |
mc.yandex.ru/metrika/watch.js |
ya.ru/search, dzen.ru | Yandex Metrika: веса для Element Coordinates, Viewport Consistency, Timing Analysis, Color Scheme, Calibration System |
smartcaptcha.yandexcloud.net/demo |
smartcaptcha.yandexcloud.net | SmartCaptcha: веса для Interval Regularity (stdDev), CAPTCHA Solve Time, поведенческие параметры решения капчи |
index.html |
Заголовки кластеров (строки 224-718) | Базовые веса кластеров: Кластер 1 (40%), Кластер 2 (25%), Кластер 3 (15%), Кластер 4 (20%), Кластер 5 (10%), Кластер 6 (15%), Кластер 7 (10%) |
bot-vs-human-detection-table.md |
Строки 5-16, 310-322 | Формула расчёта suspicionScore с указанием весов отдельных параметров (20%, 15%, 15%, 10%, 15%, 10%, 10%, 5%) |
MODULAR-TESTS-STRUCTURE.md |
Строки 592-601 | Сводная таблица кластеров с указанием общего веса: Кластер 1 (40%), Кластер 2 (25%), Кластер 3 (15%), Кластер 4 (20%), Кластер 5 (10%), Кластер 6 (15%), Кластер 7 (10%) |
QUICK-bot-detection-cheatsheet.md |
Строки 58-94 | Формула быстрого расчёта с коэффициентами для различных параметров детекции |
📌 Примечание: Все JS файлы были проанализированы через DevTools Network Inspector, декомпиляцию минифицированного кода и поиск по содержимому. Подробная информация о методах анализа и найденных фрагментах кода находится в файле JS-FILES-SOURCES.md.
Введите пароль для входа