
Libreria di rilevamento bot lato client con 28 moduli pesati, analisi comportamentale, fingerprinting del browser, honeypot e verifica lato server. Rileva browser headless, Selenium, Puppeteer, Playwright e framework di automazione stealth.
Libreria client-side per il rilevamento di bot e automazione con punteggio ponderato, analisi comportamentale, fingerprinting del browser e soglie configurabili. Rileva browser headless, Selenium, Puppeteer, Playwright, strumenti basati su CDP e framework di automazione stealth.
v2.1.0 — honeypot anti-rilevamento, fingerprinting canvas stabile su GPU, analisi comportamentale migliorata, inizializzazione lazy, rilevamento lato server di manomissioni, binding dell'impronta della richiesta e limitazione della frequenza.
human, suspicious, bot con corrispondenti azioni di contrasto (monitor, challenge, block)Browser Il tuo Server
┌──────────────────────────┐ ┌──────────────────────┐
│ Collector (singleton) │ POST │ Express Middleware │
│ ├─ 28 moduli rilevam. │ segnali │ ├─ NonceManager │
│ ├─ BehaviorTracker │ + nonce │ ├─ RateLimiter │
│ ├─ HoneypotTraps │───────────▶│ ├─ TamperDetector │
│ ├─ Trappole stack trace │ │ ├─ computeVerdict() │
│ └─ IframeContext │ │ └─ Proof-of-Work │
│ │ verdetto │ │
│ ↓ collect() → │ + proof │ Restituisce: │
│ DetectionResult[] │◀───────────│ { verdict, score, │
└──────────────────────────┘ │ confidence, proof, │
│ tamperScore } │
└──────────────────────┘
│
▼
Endpoint protetto da sessione
(login, checkout, etc.)
valida il proof prima di
concedere l'accesso
Principio chiave: Il browser raccoglie solo i segnali DetectionResult[] grezzi. Il server calcola il verdetto finale utilizzando una tabella di pesi segreta. I verdetti calcolati dal client non sono mai attendibili.
npm install
npm run build
Output in dist/:
botdetect.min.js (con polyfill, ~151 KB)botdetect-clean.min.js (solo browser moderni, ~74 KB)<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';
// oppure via globale: BotDetect.collector
| Metodo | Restituisce | Descrizione |
|---|---|---|
getInstance(config?) | Collector | Accessor singleton |
configure(config) | void | Aggiorna la configurazione a runtime |
getConfig() | CollectorConfig | Configurazione corrente |
init() | void | Inizializzazione lazy di trappole, tracciamento, honeypot |
enableTraps() | void | Installa trappole per stack trace sulle API DOM |
enableBehavioralTracking() | void | Avvia il monitoraggio di mouse/tastiera/scorrimento |
enableHoneypots(container?) | void | Installa campi honeypot |
collect() | Promise<DetectionResult[]> | Esegue tutti i rilevamenti |
setNonce(nonce) | void | Memorizza il nonce emesso dal server |
getSessionId() | string | Identificatore univoco di sessione |
getFingerprint() | string | Hash dell'impronta di sessione |
resetBehavioralData() | void | Cancella i dati comportamentali |
destroy() | void | Pulisce tutti i listener e gli elementi DOM |
import Detector from './detector/Detector';
| Metodo | Restituisce | Descrizione |
|---|---|---|
getInstance(config?) | Detector | Accessor singleton |
configure(config) | void | Aggiorna la configurazione |
analyze(results) | DetectionVerdict | Calcola punteggio + classifica (solo debug locale) |
handleError(error) | DetectionVerdict | Verdetto di fallback in caso di errore |
Attenzione:
analyze()viene eseguito interamente nel browser. Non utilizzare mai il suo output per decisioni in produzione.
interface DetectionResult {
name: string; // Nome del modulo
score: number; // 0.0 – 1.0
weight: number; // 1 – 10 (importanza)
detail?: string; // Descrizione leggibile dall'uomo
}
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';
}