BotDetect v2 — उत्पादन बॉट पहचान लाइब्रेरी
क्लाइंट-साइड बॉट और ऑटोमेशन पहचान लाइब्रेरी जिसमें भारित स्कोरिंग, व्यवहार विश्लेषण, ब्राउज़र फ़िंगरप्रिंटिंग और कॉन्फ़िगरेबल थ्रेशोल्ड शामिल हैं। हेडलेस ब्राउज़र, Selenium, Puppeteer, Playwright, CDP-आधारित टूल और स्टील्थ ऑटोमेशन फ्रेमवर्क का पता लगाता है।
v2.1.0 — एंटी-डिटेक्शन हनीपॉट, GPU-स्थिर कैनवास फ़िंगरप्रिंटिंग, उन्नत व्यवहार विश्लेषण, आलसी आरंभीकरण, सर्वर-साइड छेड़छाड़ का पता लगाना, अनुरोध फ़िंगरप्रिंट बाइंडिंग और दर सीमा।
विषय सूची
विशेषताएँ
- 28 पहचान मॉड्यूल जो ऑटोमेशन फ्रेमवर्क, हेडलेस ब्राउज़र, फ़िंगरप्रिंटिंग, व्यवहार विश्लेषण, हनीपॉट और स्टैक ट्रेस ट्रैप को कवर करते हैं
- भारित स्कोरिंग प्रणाली — प्रत्येक सिग्नल का कॉन्फ़िगरेबल भार है; अंतिम स्कोर सर्वर-साइड पर गणना किया जाता है
- तीन फैसले स्तर:
human (मानव), suspicious (संदिग्ध), bot (बॉट) जिनमें संबंधित घर्षण क्रियाएँ (monitor (निगरानी), challenge (चुनौती), block (अवरोध)) हैं
- सर्वर-साइड सत्यापन — नॉन्स-गेटेड, रीप्ले-संरक्षित, प्रूफ-ऑफ-वर्क हस्ताक्षरित
- स्टैक ट्रेस ट्रैप — ऑटोमेशन टूल कॉल स्टैक को कैप्चर करने के लिए DOM API को मंकी-पैच करता है
- व्यवहार विश्लेषण — माउस वक्रता, कीस्ट्रोक समय भिन्नता, स्क्रॉल त्वरण, स्पर्श गतिशीलता
- एंटी-डिटेक्शन हनीपॉट — यादृच्छिक CSS क्लोकिंग, डिकॉय फ़ील्ड, यथार्थवादी फ़ील्ड नाम
- सर्वर-साइड छेड़छाड़ का पता लगाना — सिग्नल अखंडता को मान्य करता है, गेमिंग प्रयासों का पता लगाता है
- अनुरोध फ़िंगरप्रिंट बाइंडिंग — PoW टोकन HTTP अनुरोध विशेषताओं से बंधे होते हैं
- दर सीमा — सभी सत्यापन एंडपॉइंट पर प्रति-सत्र दर सीमा
- कोई-स्क्रिप्ट नहीं पहचान — उन क्लाइंट की पहचान करता है जो कभी डिटेक्शन पेलोड नहीं भेजते
- ज्ञात क्रॉलर अनुमति सूची — 20+ वैध बॉट स्कोरिंग से बाहर रखे गए
आर्किटेक्चर
ब्राउज़र आपका सर्वर
┌──────────────────────────┐ ┌──────────────────────┐
│ कलेक्टर (सिंगलटन) │ POST │ Express मिडलवेयर │
│ ├─ 28 डिटेक्शन मॉड्यूल │ सिग्नल │ ├─ NonceManager │
│ ├─ BehaviorTracker │ + नॉन्स │ ├─ RateLimiter │
│ ├─ HoneypotTraps │───────────▶│ ├─ TamperDetector │
│ ├─ स्टैक ट्रेस ट्रैप │ │ ├─ computeVerdict() │
│ └─ IframeContext │ │ └─ Proof-of-Work │
│ │ फैसला │ │
│ ↓ collect() → │ + प्रूफ │ रिटर्न करता है: │
│ DetectionResult[] │◀───────────│ { verdict, score, │
└──────────────────────────┘ │ confidence, proof, │
│ tamperScore } │
└──────────────────────┘
│
▼
सत्र-गेटेड एंडपॉइंट
(लॉगिन, चेकआउट, आदि)
प्रूफ को मान्य करता है
एक्सेस देने से पहले
मुख्य सिद्धांत: ब्राउज़र केवल कच्चे DetectionResult[] सिग्नल एकत्र करता है। सर्वर एक गुप्त भार तालिका का उपयोग करके अंतिम फैसले की गणना करता है। क्लाइंट-कंप्यूटेड फैसलों पर कभी भरोसा नहीं किया जाता।
त्वरित आरंभ
1. बिल्ड करें
npm install
npm run build
dist/ में आउटपुट:
botdetect.min.js (पॉलीफिल के साथ, ~151 KB)
botdetect-clean.min.js (केवल आधुनिक ब्राउज़र के लिए, ~74 KB)
2. अपने पेज पर शामिल करें
<script src="/path/to/botdetect.min.js"></script>
<script>
BotDetect.collector.enableTraps();
BotDetect.collector.enableBehavioralTracking();
BotDetect.collector.enableHoneypots();
</script>
3. सर्वर-साइड सत्यापन सेट करें
cd server
npm install express cors express-session
node example-integration.js
4. संवेदनशील कार्रवाई पर सिग्नल भेजें
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. सर्वर पर मान्य करें
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
कलेक्टर (सिंगलटन)
import Collector from './collector/Collector';
// या वैश्विक के माध्यम से: BotDetect.collector
डिटेक्टर (केवल डीबग)
import Detector from './detector/Detector';
चेतावनी: 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 };
}
सर्वर-साइड एकीकरण
Express मिडलवेयर
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 }, // 5-मिनट नॉन्स समाप्ति
noScript: { timeout: 10000 }, // 10s नो-स्क्रिप्ट विंडो
rateLimit: { maxRequests: 10, windowMs: 60000 },
noScriptPaths: ['/api/login', '/api/checkout', '/api/register']
});
app.use('/api', router);
एंडपॉइंट
| Endpoint | Method (विधि) | Purpose (उद्देश्य) |
|---|
/api/botdetect/nonce |
सर्वर प्रतिक्रिया प्रारूप
{
"verdict": "human",
"score": 0.125,
"confidence": 0.85,
"tamperScore": 0,
"friction": "monitor",
"threshold": 0.5,
"proof": "a1b2c3d4e5f6..."
}
सर्वर-साइड स्कोरिंग (Node.js)
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
पहचान मॉड्यूल
ऑटोमेशन फ्रेमवर्क (भार 5–7)
Playwright-विशिष्ट (भार 3–4)
| Module (मॉड्यूल) | Detects (पता लगाता है) | Weight (भार) |
|---|
playwrightWebKit | WebKit ऑटोमेशन आर्टिफैक्ट | 4 |
playwrightOrientation | ओरिएंटेशन + chrome.runtime असंगति | 3 |
व्यवहार विश्लेषण (भार 7)
| Module (मॉड्यूल) | Signals Analyzed (विश्लेषित सिग्नल) | Weight (भार) |
|---|
behavioralAnalysis | माउस वक्रता + सीधी रेखा अनुपात, कीस्ट्रोक CV + बर्स्ट पैटर्न + KPM, स्क्रॉल त्वरण + दिशा परिवर्तन, स्पर्श बल भिन्नता + त्रिज्या | 7 |
ब्राउज़र फ़िंगरप्रिंटिंग (भार 3–4)
नेविगेटर और OS गुण (भार 5)
| Module (मॉड्यूल) | Checks (जाँच) | Weight (भार) |
|---|
navigatorInconsistencies | 11 जाँच: languages, plugins, mimeTypes, platform, UA, cookies, DNT, touch, hardwareConcurrency, deviceMemory, connection | 5 |
स्क्रीन और प्रदर्शन (भार 3)
सक्रिय ट्रैप और हनीपॉट (भार 8–9)
| Module (मॉड्यूल) | Detects (पता लगाता है) | Weight (भार) |
|---|
honeypotTraps | यादृच्छिक छिपे हुए फ़ील्ड + डिकॉय + कैनरी एंडपॉइंट |
नेटवर्क और प्रासंगिक (भार 1–2)
अनुमति सूची (भार 0)
| Module (मॉड्यूल) | Detects (पता लगाता है) | Weight (भार) |
|---|
verifiedBots | 20+ ज्ञात क्रॉलर (Googlebot, Bingbot, Yandex, Facebook, Twitter, आदि) — -1 लौटाता है, स्कोरिंग से बाहर | 0 |
कॉन्फ़िगरेशन
कलेक्टर
const collector = Collector.getInstance({
detectionTimeoutMs: 1000, // तेज़ UX के लिए कम करें
enableTraps: true,
enableBehavioralTracking: true,
enableHoneypots: true,
thresholds: {
strict: 0.3, // आक्रामक (लॉगिन, चेकआउट)
balanced: 0.5, // डिफ़ॉल्ट
relaxed: 0.7 // अनुमति देने वाला (सामग्री ब्राउज़िंग)
}
});
डिटेक्टर (केवल डीबग)
const detector = Detector.getInstance({
threshold: 'balanced', // 'strict' | 'balanced' | 'relaxed' | number
minSignals: 2, // बूस्ट से पहले न्यूनतम सिग्नल
signalBoostThreshold: 0.8, // इससे ऊपर के सिग्नल को अतिरिक्त भार मिलता है
failPolicy: 'open', // 'open' = त्रुटि पर मानव, 'closed' = त्रुटि पर बॉट
frictionThresholds: {
monitor: 0.2,
challenge: 0.5,
block: 0.8
}
});
सर्वर
createBotDetectEndpoint({
secretSalt: process.env.BOTDETECT_SALT, // गुप्त रखें
scoring: { threshold: 'balanced' },
nonce: { ttl: 300000, cleanupInterval: 60000 },
noScript: { timeout: 10000 },
rateLimit: { maxRequests: 10, windowMs: 60000 },
requestFingerprint: true, // PoW को अनुरोध विशेषताओं से बांधें
noScriptPaths: ['/api/login', '/api/checkout']
});
उत्पादन जाँच सूची
सुरक्षा
प्रदर्शन
निगरानी
परीक्षण
npm test # 74 Jest परीक्षण 6 सूट में
npm run typecheck # TypeScript सख्त मोड
npm run lint # ESLint
npm run build # Webpack उत्पादन बंडल
लाइसेंस
Apache — Lahmeri Mohamed Amine