
Клиентская библиотека для обнаружения ботов с 28 взвешенными модулями, поведенческим анализом, сбором отпечатков браузера, Honeypot-ловушками и серверной верификацией. Обнаруживает headless-браузеры, Selenium, Puppeteer, Playwright и стелс-фреймворки автоматизации.
Клиентская библиотека для обнаружения ботов и автоматизации с взвешенной оценкой, поведенческим анализом, сбором цифрового отпечатка браузера и настраиваемыми порогами. Обнаруживает безголовые браузеры, Selenium, Puppeteer, Playwright, инструменты на основе CDP и стелс-фреймворки автоматизации.
v2.1.0 — антидетекционные приманки, стабильный к GPU canvas-отпечаток, улучшенный поведенческий анализ, ленивая инициализация, серверное обнаружение подделки сигналов, привязка отпечатка запроса и ограничение скорости.
human, suspicious, bot с соответствующими действиями (monitor, challenge, block)Браузер Ваш сервер
┌──────────────────────────┐ ┌──────────────────────┐
│ Collector (синглтон) │ POST │ Express Middleware │
│ ├─ 28 модулей │ signals │ ├─ NonceManager │
│ ├─ BehaviorTracker │ + nonce │ ├─ RateLimiter │
│ ├─ HoneypotTraps │───────────▶│ ├─ TamperDetector │
│ ├─ Stack trace traps │ │ ├─ computeVerdict() │
│ └─ IframeContext │ │ └─ Proof-of-Work │
│ │ verdict │ │
│ ↓ collect() → │ + proof │ Возвращает: │
│ DetectionResult[] │◀───────────│ { verdict, score, │
└──────────────────────────┘ │ confidence, proof, │
│ tamperScore } │
└──────────────────────┘
│
▼
Эндпоинт, защищённый сессией
(логин, оформление заказа и т.д.)
проверяет proof перед
предоставлением доступа
Ключевой принцип: браузер собирает только необработанные сигналы DetectionResult[]. Сервер вычисляет итоговый вердикт, используя секретную таблицу весов. Вердикты, вычисленные на клиенте, никогда не доверяются.
npm install
npm run build
Результат в dist/:
botdetect.min.js (с полифиллами, ~151 КБ)botdetect-clean.min.js (только для современных браузеров, ~74 КБ)<script src="/path/to/botdetect.min.js"></script>
<script>
BotDetect.collector.enableTraps();
BotDetect.collector.enableBehavioralTracking();
BotDetect.collector.enableHoneypots();
</script>
cd server
npm install express cors express-session
node example-integration.js
async function onLogin() {
const { nonce } = await (await fetch('/api/botdetect/nonce')).json();
BotDetect.collector.setNonce(nonce);
const signals = await BotDetect.collector.collect();
const resp = await fetch('/api/botdetect/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ signals, nonce })
});
const { verdict, score, proof, friction } = await resp.json();
document.getElementById('botdetect-proof').value = proof;
document.getElementById('login-form').submit();
}
app.post('/api/login', (req, res) => {
const bd = req.session.botdetect;
if (!bd) return res.status(403).json({ error: 'no_verification' });
if (bd.verdict === 'bot') return res.status(403).json({ error: 'access_denied' });
if (bd.verdict === 'suspicious') return challengeCaptcha(req, res);
res.json({ success: true });
});
import Collector from './collector/Collector';
// или через глобал: BotDetect.collector
| Метод | Возвращает | Описание |
|---|---|---|
getInstance(config?) | Collector | Доступ к синглтону |
configure(config) | void | Обновление конфигурации во время выполнения |
getConfig() | CollectorConfig | Текущая конфигурация |
init() | void | Ленивая инициализация ловушек, отслеживания, приманок |
enableTraps() | void | Установка ловушек стек-трейсов на DOM API |
enableBehavioralTracking() | void | Запуск мониторинга мыши/клавиатуры/прокрутки |
enableHoneypots(container?) | void | Установка полей-приманок |
collect() | Promise<DetectionResult[]> | Запуск всех обнаружений |
setNonce(nonce) | void | Сохранение nonce, выданного сервером |
getSessionId() | string | Уникальный идентификатор сессии |
getFingerprint() | string | Хэш отпечатка сессии |
resetBehavioralData() | void | Очистка поведенческих данных |
destroy() | void | Очистка всех слушателей и DOM-элементов |
import Detector from './detector/Detector';
| Метод | Возвращает | Описание |
|---|---|---|
getInstance(config?) | Detector | Доступ к синглтону |
configure(config) | void | Обновление конфигурации |
analyze(results) | DetectionVerdict | Оценка + классификация (только локальная отладка) |
handleError(error) | DetectionVerdict | Вердикт по умолчанию при ошибке |
Предупреждение:
analyze()выполняется полностью в браузере. Никогда не используйте его результат для продакшен-решений.
interface DetectionResult {
name: string; // Имя модуля
score: number; // 0.0 – 1.0
weight: number; // 1 – 10 (важность)
detail?: string; // Описание на человеческом языке
}
interface DetectionVerdict {
verdict: 'bot' | 'suspicious' | 'human';
score: number; // 0.0 – 1.0
confidence: number; // 0.0 – 1.0
signals: DetectionResult[];
threshold: number;
friction: 'monitor' | 'challenge' | 'block';
}
interface CollectorConfig {
detectionTimeoutMs: number; // таймаут на модуль (по умолчанию: 3000)
enableTraps: boolean;
enableBehavioralTracking: boolean;
enableHoneypots: boolean;
thresholds: { strict: number; balanced: number; relaxed: number };
}