Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
vi-bot — Bibliothèque de détection de bots côté client avec 28 modules pondérés, analyse comportementale, empreinte numérique de navigateur, honeypots et vérification côté serveur. Détecte les navigateurs sans tête, Selenium, Puppeteer, Playwright et les frameworks d'automatisation furtifs. | Kitploit
Outils/GitHubGitHub/mohamedlahmeri01/vi-bot
Outils DéfensifsÉvasion IDS/IPSSécurité WebAnti-BotUsurpation d'Empreinte NumériqueDétection d'Anomalies
GitHubmohamedlahmeri01/vi-bot

vi-bot

Voir le dépôt
21il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Bibliothèque de détection de bots côté client avec 28 modules pondérés, analyse comportementale, empreinte numérique de navigateur, honeypots et vérification côté serveur. Détecte les navigateurs sans tête, Selenium, Puppeteer, Playwright et les frameworks d'automatisation furtifs.

Partager

BotDetect v2 — Bibliothèque de détection de robots en production

BotDetect Logo

Bibliothèque de détection de robots et d'automatisation côté client avec score pondéré, analyse comportementale, empreinte numérique du navigateur et seuils configurables. Détecte les navigateurs sans tête, Selenium, Puppeteer, Playwright, les outils basés sur CDP et les frameworks d'automatisation furtifs.

v2.1.0 — pots de miel anti-détection, empreinte canvas stable sur GPU, analyse comportementale améliorée, initialisation paresseuse, détection de falsification côté serveur, liaison d'empreinte de requête, et limitation de débit.


Table des matières

  • Fonctionnalités
  • Architecture
  • Démarrage rapide
  • API côté client
  • Intégration côté serveur
  • Modules de détection
  • Configuration
  • Liste de vérification pour la production
  • Tests

Fonctionnalités

  • 28 modules de détection couvrant les frameworks d'automatisation, les navigateurs sans tête, l'empreinte numérique, l'analyse comportementale, les pots de miel et les pièges de trace de pile
  • Système de score pondéré — chaque signal a un poids configurable ; le score final est calculé côté serveur
  • Trois niveaux de verdict : humain, suspect, robot avec des actions de friction correspondantes (surveiller, défier, bloquer)
  • Vérification côté serveur — protégée par nonce, contre la relecture, signée par preuve de travail
  • Pièges de trace de pile — modifie les API DOM pour capturer les appels de pile des outils d'automatisation
  • Analyse comportementale — courbure de la souris, variance temporelle des frappes, accélération du défilement, dynamique tactile
  • Pots de miel anti-détection — masquage CSS aléatoire, champs leurres, noms de champs réalistes
  • Détection de falsification côté serveur — valide l'intégrité des signaux, détecte les tentatives de triche
  • Liaison d'empreinte de requête — jetons PoW liés aux attributs de la requête HTTP
  • Limitation de débit — limitation de débit par session sur tous les points de terminaison de vérification
  • Détection sans script — identifie les clients qui n'envoient jamais de charges utiles de détection
  • Liste blanche de robots connus — 20+ robots légitimes exclus du score

Architecture

root@kitploit:~
Navigateur                                 Votre Serveur
┌──────────────────────────────┐            ┌──────────────────────────┐
│ Collecteur (singleton)       │  POST      │ Middleware Express        │
│  ├─ 28 modules de détection │  signaux   │  ├─ GestionnaireNonce     │
│  ├─ SuiviComportemental     │  + nonce   │  ├─ LimiteurDébit         │
│  ├─ PiègesPotMiel           │───────────▶│  ├─ DétecteurFalsification│
│  ├─ PiègesTracePile         │            │  ├─ calculerVerdict()     │
│  └─ ContexteIframe         │            │  └─ Preuve-de-Travail      │
│                              │  verdict   │                            │
│  ↓ collect() →              │  + preuve  │  Retourne :               │
│  DetectionResult[]          │◀───────────│  { verdict, score,        │
└──────────────────────────────┘            │    confiance, preuve,     │
                                            │    scoreFalsification }   │
                                            └──────────────────────────┘
                                                  │
                                                  ▼
                                            Point de terminaison
                                            protégé par session
                                            (connexion, paiement, etc.)
                                            valide la preuve avant
                                            d'accorder l'accès

Principe clé : Le navigateur collecte uniquement les signaux bruts DetectionResult[]. Le serveur calcule le verdict final à l'aide d'une table de poids secrète. Les verdicts calculés par le client ne sont jamais fiables.


Démarrage rapide

1. Construire

root@kitploit:~
npm install
npm run build

Produit dans dist/ :

  • botdetect.min.js (avec polyfills, ~151 Ko)
  • botdetect-clean.min.js (navigateurs modernes uniquement, ~74 Ko)

2. Inclure sur votre page

root@kitploit:~
<script src="/chemin/vers/botdetect.min.js"></script>
<script>
  BotDetect.collector.enableTraps();
  BotDetect.collector.enableBehavioralTracking();
  BotDetect.collector.enableHoneypots();
</script>

3. Configurer la vérification côté serveur

root@kitploit:~
cd server
npm install express cors express-session
node example-integration.js

4. Envoyer les signaux lors d'une action sensible

root@kitploit:~
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();
}

5. Valider sur le serveur

root@kitploit:~
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 });
});

API côté client

Collecteur (singleton)

root@kitploit:~
import Collector from './collector/Collector';
// ou via global : BotDetect.collector

Détecteur (débogage uniquement)

root@kitploit:~
import Detector from './detector/Detector';

Avertissement : analyze() s'exécute entièrement dans le navigateur. N'utilisez jamais sa sortie pour des décisions de production.

Types

root@kitploit:~
interface DetectionResult {
  name: string;      // Nom du module
  score: number;     // 0.0 – 1.0
  weight: number;    // 1 – 10 (importance)
  detail?: string;   // Description lisible par un humain
}

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;   // délai d'attente par module (défaut : 3000)
  enableTraps: boolean;
  enableBehavioralTracking: boolean;
  enableHoneypots: boolean;
  thresholds: { strict: number; balanced: number; relaxed: number };
}

Intégration côté serveur

Middleware Express

root@kitploit:~
const { createBotDetectEndpoint } = require('./server');

const { router, generateProofOfWork, cleanup } = createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,
  scoring: {
    threshold: 'balanced',       // 'strict' | 'balanced' | 'relaxed' | number
    minSignals: 2,
    signalBoostThreshold: 0.8,
    frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
  },
  nonce: { ttl: 300000 },              // expiration du nonce après 5 minutes
  noScript: { timeout: 10000 },         // fenêtre sans script de 10 s
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  noScriptPaths: ['/api/login', '/api/checkout', '/api/register']
});

app.use('/api', router);

Points de terminaison

Point de terminaisonMéthodeObjectif
/api/botdetect/nonce

Format de réponse du serveur

root@kitploit:~
{
  "verdict": "human",
  "score": 0.125,
  "confidence": 0.85,
  "tamperScore": 0,
  "friction": "monitor",
  "threshold": 0.5,
  "proof": "a1b2c3d4e5f6..."
}

Score côté serveur (Node.js)

root@kitploit:~
const { computeVerdict, RateLimiter, NonceManager } = require('./scoring');

const verdict = computeVerdict(signals, {
  threshold: 'balanced',
  minSignals: 2,
  signalBoostThreshold: 0.8,
  frictionThresholds: { monitor: 0.2, challenge: 0.5, block: 0.8 }
});

// verdict.tamperScore > 0 si falsification de signal détectée

Modules de détection

Frameworks d'automatisation (poids 5–7)

Spécifiques à Playwright (poids 3–4)

ModuleDétectePoids
playwrightWebKitArtefacts d'automatisation WebKit4
playwrightOrientationIncohérence orientation + chrome.runtime3

Analyse comportementale (poids 7)

ModuleSignaux analysésPoids
behavioralAnalysisCourbure de la souris + rapport ligne droite, CV des frappes + schémas de rafales + KPM, accélération du défilement + changements de direction, variance de force tactile + rayon7

Empreinte numérique du navigateur (poids 3–4)

Propriétés Navigateur & OS (poids 5)

ModuleVérifiePoids
navigatorInconsistencies11 vérifications : languages, plugins, mimeTypes, platform, UA, cookies, DNT, touch, hardwareConcurrency, deviceMemory, connection5

Écran & Performances (poids 3)

Pièges actifs & Pots de miel (poids 8–9)

ModuleDétectePoids
honeypotTrapsChamps cachés aléatoires + leurres + point de terminaison canari

Réseau & Contextuel (poids 1–2)

Liste blanche (poids 0)

ModuleDétectePoids
verifiedBots20+ robots connus (Googlebot, Bingbot, Yandex, Facebook, Twitter, etc.) — retourne -1, exclus du score0

Configuration

Collecteur

root@kitploit:~
const collector = Collector.getInstance({
  detectionTimeoutMs: 1000,    // Plus bas pour une UX plus rapide
  enableTraps: true,
  enableBehavioralTracking: true,
  enableHoneypots: true,
  thresholds: {
    strict: 0.3,     // Agressif (connexion, paiement)
    balanced: 0.5,   // Défaut
    relaxed: 0.7     // Permissif (navigation de contenu)
  }
});

Détecteur (débogage uniquement)

root@kitploit:~
const detector = Detector.getInstance({
  threshold: 'balanced',      // 'strict' | 'balanced' | 'relaxed' | number
  minSignals: 2,              // Nombre minimum de signaux avant boost
  signalBoostThreshold: 0.8,  // Les signaux au-dessus de ce seuil reçoivent un poids supplémentaire
  failPolicy: 'open',         // 'open' = humain en cas d'erreur, 'closed' = robot en cas d'erreur
  frictionThresholds: {
    monitor: 0.2,
    challenge: 0.5,
    block: 0.8
  }
});

Serveur

root@kitploit:~
createBotDetectEndpoint({
  secretSalt: process.env.BOTDETECT_SALT,  // Garder secret
  scoring: { threshold: 'balanced' },
  nonce: { ttl: 300000, cleanupInterval: 60000 },
  noScript: { timeout: 10000 },
  rateLimit: { maxRequests: 10, windowMs: 60000 },
  requestFingerprint: true,                // Lier PoW aux attributs de la requête
  noScriptPaths: ['/api/login', '/api/checkout']
});

Liste de vérification pour la production

Sécurité

  • secretSalt stocké dans une variable d'environnement, jamais dans le code
  • HTTPS + HSTS activé
  • CORS limité à votre domaine
  • Durée de vie du nonce définie à ≤ 5 minutes
  • Secrets de session changés régulièrement
  • Limitation de débit configurée par point de terminaison
  • Liaison d'empreinte de requête activée

Performances

  • detectionTimeoutMs ajusté (1000–2000ms recommandé)
  • Bundle propre (botdetect-clean.min.js) pour les navigateurs modernes
  • Pré-charger la détection au ralenti avant une action sensible
  • Surveiller la latence de collecte en production (performance.measure)

Surveillance

  • Journaliser les événements tamperScore > 0 (tentatives de falsification de signal)
  • Suivre le taux de friction === 'block' dans le temps
  • Alerter en cas de dépassement des seuils de limitation de débit
  • Réviser l'efficacité de la détection trimestriellement (les robots évoluent)

Tests

root@kitploit:~
npm test              # 74 tests Jest répartis sur 6 suites
npm run typecheck     # Mode strict TypeScript
npm run lint          # ESLint
npm run build         # Bundle de production Webpack

Licence

Apache — Lahmeri Mohamed Amine

Télécharger l’outil
MéthodeRetourDescription
getInstance(config?)CollectorAccesseur singleton
configure(config)voidMettre à jour la configuration en cours d'exécution
getConfig()CollectorConfigConfiguration actuelle
init()voidInitialisation paresseuse des pièges, suivi, pots de miel
enableTraps()voidInstaller les pièges de trace de pile sur les API DOM
enableBehavioralTracking()voidDémarrer la surveillance souris/clavier/défilement
enableHoneypots(conteneur?)voidInstaller les champs pot de miel
collect()Promise<DetectionResult[]>Exécuter toutes les détections
setNonce(nonce)voidStocker le nonce émis par le serveur
getSessionId()stringIdentifiant unique de session
getFingerprint()stringHachage d'empreinte de session
resetBehavioralData()voidEffacer les données comportementales
destroy()voidNettoyer tous les écouteurs et éléments DOM
MéthodeRetourDescription
getInstance(config?)DetectorAccesseur singleton
configure(config)voidMettre à jour la configuration
analyze(résultats)DetectionVerdictScore + classification (débogage local uniquement)
handleError(erreur)DetectionVerdictVerdict de secours en cas d'échec
GET
Émettre un nonce à usage unique
/api/botdetect/verifyPOSTSoumettre les signaux, recevoir un verdict signé
/api/botdetect/midcyclePOSTRe-vérification en milieu de session
ModuleDétectePoids
webdrivernavigator.webdriver, propriétés selenium, descripteurs getter5
chromeDriverDoublons intégrés sur window, cache_ dans document6
fakeCreateElementdocument.createElement usurpé7
toStringSpoofedAltération de Function.prototype.toString6
cdpDetectioncdc_*, __playwright__, __puppeteer__ globals, chrome.runtime7
stealthDetectionIntégrité des fonctions natives (Notification, Navigator, Permissions, plugins, languages, canvas)5
inconsistentCloneErrorIncohérences dans l'algorithme de clonage structuré5
iframeChromeRuntimechrome.runtime dans un contexte iframe5
inconsistentChromeObjectObjet chrome différent entre iframe et fenêtre principale4
ModuleDétectePoids
canvasFingerprintDifférences de rendu canvas, somme des pixels, ratio toile vierge4
webglFingerprintRendu SwiftShader, llvmpipe, Brian Paul, précision des shaders4
fingerprintConsistencyVérification croisée : cohérence canvas + WebGL + écran + navigateur4
audioFingerprintTaux d'échantillonnage AudioContext, anomalies des données de fréquence3
fontEnumerationEnsembles de polices limités (≤15 polices de base → sans tête)3
timingAnomaliesRésolution de performance.now(), temporisation des boucles, délai rAF, latence eval3
ModuleDétectePoids
screenAnomaliesDimensions nulles, profondeur de couleur, incohérences d'espace disponible3
performanceAnomaliesTiming de navigation, mémoire, origine temporelle, performance.now()3
navigationFlowEntrées de performance, suivi pushState, référent manquant3
9
stackTraceTrapsAnalyse de la pile d'appels de querySelector/getElementById/eval8
ModuleDétectePoids
webrtcCheckExposition IP locale, anomalies des candidats ICE2
hardwareConcurrencyRapport CPU vs mémoire, valeurs invraisemblables2
hiddenScrollBarre de défilement cachée en mode sans tête (bureau uniquement)2
noHovermqAbsence de prise en charge de la media query hover (bureau uniquement)1
webGLDisabledWebGL désactivé, SwiftShader1
inconsistentPermissionsÉtats disparates de l'API Permissions4