स्ट्राइलोबोट
स्कॉपर्स वास्तविक उपयोगकर्ताओं की नकल करने के लिए AI का प्रयोग शुरू करने के बारे में हैं, इसलिए मैंने एक बोट डिटेक्टर बनाया जो सीखता है
भाग पढ़ें 2: कैसे बोट्स स्मार्ट हो गए - बोट पता लगाने में नया सीमांत
👉 See It Live यह वास्तविक उत्पादन प्रणाली है जो आपके अनुरोध को एक मिलीसेकेंड में पता लगाता है।
प्रमुख संकल्पना: व्यवहारिक रूटिंग यह एक नया वर्ग सक्षम करता है - जहां पारदर्शी , समायोज्य | " |teams \ " detectors और सीखने वाली प्रणालियों को सीखा गया व्यवहार पैटर्नों पर आधारित प्रतिक्रियात्मक रूप से ट्रैफिक को मार्ग दिखाता है YARP गेटवेबॉट्स कभी भी आपके बैकएण्ड तक नहीं पहुँचते
यह क्यों है
बोट पता लगाना आधुनिक वेब इंजीनियरिंग में सबसे कठिन समस्याओं में से एक है
समस्या अभी बदली है तीन साल पहले , आप उपयोक्ता पर रेगेक्स के साथ बोटों को ब्लॉक कर सकते थे बड़े पैमाने पर वास्तविक उपयोगकर्ता व्यवहार को अनुकरण करने के लिए बड़ी भाषा मॉडलों ने इसे शून्य बना दियाएक एलएलएम1powered scraper doesn’t'it just blindly request the same path repeatedly. It understands your site structure,It adapts when blocked,And requests pages in realistic order.It is indistinguishable from a human except in aggregate behavior.
- परिवर्तित आवासीय प्रतिनिधि
- पूरी तरह से वैध ब्राउज़र अंगुल छापें
- वास्तविक माउस गति
- जावास्क्रिप्ट चला रहा है
- जब अवरोधित किया जाता है तब अनुकूलन
वाणिज्यिक समाधान इस समस्या को हल करता है।
मैं कुछ अलग करना चाहता था
- खोलें - आप पढ़ सकते हैं
- स्थानीय - नहीं
- समझदार - स्पष्ट निर्णय
- विस्तारित करने में आसान - अपने विशिष्ट खतरे सतह के लिए अनुकूल डिटेक्टर जोड़ें
- चलाने के लिए सस्ते सीपीयू
- के लिए बनाया गया v4 आधुनिक LLM को संभालता है
तो मैंने बनाया स्टिलियोबोटName एक मॉड्यूलर के लिए सीखने वाले बोट पता लगाने की इंजन
यह सरल शुरू हुआ और फिर बहुत अधिक रोचक चीज़ में विकसित हो गया
एक ठोस उदाहरण (यह वास्तव में क्या पकड़ता है
यह एक वास्तविक है
एक scraper spoofs:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120
वैध दिखता है
लेकिन यह भूल जाता है एक हेडर Chrome हमेशा भेजता है:
Sec-Fetch-Mode
और इसके Accept-Language हेडर नहीं matches claimed locale
और अनुरोध दर स्पष्ट रूप से स्वचालित है
एक संकेत ठीक है
सिस्टम इसे milliseconds के नीचे चिह्नित करता है
यह संपूर्ण डिजाइन का आधार है एक बड़े पर निर्भर नहीं करें
प्रणाली का दर्शन
इस परियोजना के मूल में , यह वास्तव में बोट पता लगाने के बारे में नहीं है यातायात को एक जीवित प्रणाली के रूप में देखना एक अलग-अलग अनुरोधों की धारा के बजाय
यह अब क्यों महत्वपूर्ण है LLM-powered bots are't dumbMSC2 They adaptM SK3 An LLM bot hits your APIMST4 gets rateMst5limitedMSt6 changes UserM st7AgentM ST8 rotates IPM St9 requests related products Mstr10like a human wouldM str11 then systematically extracts dataMrstr12 Static rules canMtr13t keep upMrr14 But an adaptive system canRstr15
आधुनिक scrapers जीवों की तरह व्यवहार करते हैं। वे सीखते हैं।
यहाँ दर्शन सरल है
- कई संकेतों को देखें - UAM SK1 शीर्षिकाएं, IPMSC3 व्यवहारिक नमूनेMST4 क्रॉस
- इनका संयोजन करें एक संकेत पर विश्वास नहीं करता
- उनके बीच बातचीत करें - एक पूर्ण यूए संदिग्ध है यदि आईपी डाटा सेंटर है
- समय के साथ अनुकूलन - नमूने नष्ट हो जाते हैं।
एक एकल के बजाय "bot/notM SK2bot"checkMSC4 इंजन बन जाता है छोटे डिटेक्टरों का एक नेटवर्कप्रत्येक साझे निर्णय में योगदान करता है।
यह सिस्टम बनाया गया है कि पारदर्शीदीर्घकालिक लक्ष्य के साथ , कम एक फायरवाल की तरह व्यवहार करने और अधिक एक प्रतिरक्षा प्रणालीकिनारे पर तेजी से:,,में बुद्विमान और हमेशा सीखने वाला
क्यों एकल | - | चिह्न पता लगाने में असफल होता है |( | और StyloBot इसे कैसे बचाता है )
अधिकांश प्रणालियां एक या दो संकेतों पर निर्भर करती हैं
- यदि उपयोक्ता कहता है तो "ब्लॉक करें आधुनिक बोट वास्तविक उपयोक्ता का उपयोग करते हैं
- यदि दर है तो ब्लॉक करें Intelligent bots throttle
- यदि आईपी डाटा सेंटर में है तो ब्लॉक करें → आवासीय प्रॉक्सी नेटवर्कों में वास्तविक घरेलू आईएसपी है
- यदि जावास्क्रिप्ट नहीं करता है तो ब्लॉक करें → हेडलेस ब्राउज़र JS को पूर्ण रूप से अच्छी तरह निष्पादित करते हैं
पैटर्न कोई भी एकल संकेत बनाया जा सकता है समाधान एक संकेत पर निर्भर नहीं करें
स्टेलोबोट कई कमजोर संकेतों को एक मजबूत निर्णय में सम्मिलित करता है अधिक डेटा केंद्र आईपी अधिक गुम सुरक्षा शीर्षिकाएँ अधिक अनुरोध दर असामान्यताएँ अधिक cross-layer inconsistency
यह कैसे काम करता है (छोटे संस्करण
कई छोटे डिटेक्टरों के माध्यम से अनुरोध प्रवाह
इसे हवाई अड्डे की सुरक्षा के रूप में सोचें।
flowchart TB
subgraph Request["Incoming Request"]
R[HTTP Request]
end
subgraph FastPath["Fast Path (< 100ms)"]
UA[User-Agent Check]
HD[Header Analysis]
IP[Datacenter IP Lookup]
RT[Rate Anomalies]
HE[Heuristic Model]
end
subgraph SlowPath["Slow Path (Async Learning)"]
LLM[LLM Reasoning]
Learn[Weight Learning]
end
subgraph Output["Decision"]
Score[Risk Score 0-1]
Action[Allow / Throttle / Block]
end
R --> UA & HD & IP & RT
UA & HD & IP & RT --> HE
HE --> Score --> Action
HE -.-> LLM -.-> Learn
Learn -.->|updates weights| HE
style FastPath stroke:#10b981,stroke-width:2px
style SlowPath stroke:#6366f1,stroke-width:2px
style Output stroke:#f59e0b,stroke-width:2px
त्वरित पथ
समक्रमिक रूप से चलाता है
- ज्ञात बोट पैटर्न
- गुम हेडर वास्तविक ब्राउज़र हमेशा भेजें
- डेटा केंद्र आईपी (AWS/AzureM SK2GCPMSC3
- दर स्पाइक
- यूए + शीर्षिकाओं के बीच असंगतताएं
यह पकड़ता है 80% bots instantly
धीमी पथ
पृष्ठभूमि में चलाता है
- सीखी हुई भारों के साथ हीरिस्टिक मॉडल
- एलएलएम तर्क के माध्यम से ओलामाCity name (optional, probably does not need a translation)
- पैटर्न प्रतिष्ठा अद्यतन कर रहा है
- अस्थिर संकेत भूल जा रहा है
यह अनुकूलन bots - सबसे अधिक लोगों को पकड़ता है सोचना वे उपयोक्ता पर "regex के साथ पकड़ रहे हैं
इसे 10 सेकेंड में प्रयास करें
स्थानीय संस्थापन
dotnet add package Mostlylucid.BotDetection
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddBotDetection();
var app = builder.Build();
app.UseBotDetection();
app.Run();
यह है
इसे पहली बार देखो
अभी भी स्थापित नहीं करना चाहते हैं स्टिलियोबोट का अवलोकन करें उत्पादन प्रणाली को कार्य में देखना।
क्या पता लगाता है (एक नज़र में
| जाँचें | क्या यह पाता है |
|---|---|
| उपयोगकर्ता-अभिकर्ता ज्ञात बॉट्स | |
| शीर्षिका | गुम सुरक्षा शीर्षिकाएँ |
| आईपी क्लाउड होस्ट जो अपने को गृह उपयोगकर्ता बनाते हैं | |
| दर | स्वचालन बर्स्ट्स |
| सुसंगतता Chrome के बिना |
सटीकता स्लीपर विशेषता है - आधुनिक बोट स्पॉफ कर सकते हैं एक संकेत लेकिन आमतौर पर क्रॉस में असफल
एक वास्तविक पता लगाने का परिणाम (Broken Down
यहाँ क्या एक वास्तविक पता लगाना दिखता है - वास्तविक डेटा से stylobot.net आरंभिक के साथ उत्पादन में चल रहा है
सारांश
{
"policy": "fastpath",
"isBot": false,
"isHuman": true,
"humanProbability": 0.8,
"botProbability": 0.2,
"confidence": 0.76,
"riskBand": "Low",
"recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 20%)" },
"processingTimeMs": 50.7,
"detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral", "Heuristic", "VersionAge", "Inconsistency"],
"detectorCount": 8,
"earlyExit": false
}
डिटेक्टर 8 में चलाया गया एकाधिक साक्ष्य स्रोतों में समानांतर निष्पादन
डिटेक्टर योगदान
प्रत्येक डिटेक्टर एक भारित प्रभाव का योगदान करता है
| डिटेक्टर | प्रभाव | वज़न | МSK3 | भारित | ||||
|---|---|---|---|---|---|---|---|---|
| उपयोक्ता अभिकर्ता अभिकर्ता सामान्य दिखाई देता है | ||||||||
| शीर्षिका हेडर सामान्य दिखाई देते हैं | ||||||||
| व्यवहारिक अनुरोध पैटर्न सामान्य दिखाई देते हैं | ||||||||
| शल्यचिकित्सा | -0.77 | 2.0 | -1.54 मानव संभावना | |||||
| क्लाइंट साइड फ़िंगरप्रिंट वैध प्रतीत होता है | ||||||||
| संस्करण आयु ब्राउज़र | ||||||||
| असंगतता कोई हेडर नहीं | ||||||||
| आईपी स्थानीय होस्ट dev में तटस्थ |
ह्रासीय डिटेक्टर यहाँ पर प्रभावी है - यहM SK1 इसकी भारित 2x और मानव विश्वास को प्राप्त करने के लिए उपयोग किया गया \16 विशेषताएँ
संकलित संकेत
प्रत्येक डिटेक्टर संकेतों का उत्सर्जन करता है जो ह्रासीय मॉडल में फीड करता है
{
"ua.is_bot": false,
"ua.raw": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
"ip.is_local": true,
"ip.address": "::1",
"header.has_accept_language": true,
"header.has_accept_encoding": true,
"header.count": 16,
"fingerprint.integrity_score": 1,
"behavioral.anomaly": false,
"heuristic.prediction": "human",
"heuristic.confidence": 0.77,
"versionage.analyzed": true
}
ये संकेत समय पर बने रहते हैं और सीखने वाली प्रणाली को प्रशिक्षित करते हैं
श्रेणी विभाजन
अंतिम निर्णय के लिए श्रेणी के आधार पर कुल प्राप्तियां
श्रेणी | अंक | | | भार || | नोट्स |----------|-------|--------|-------| | हेरिस्टिक | | | \ -1.54 | МSK3 | {\displaystyle \mathcal {4 | & quot;|,& quot ; सबसे मजबूत मानव संकेत | उपयोगकर्ता अभिकर्ता हेडर व्यवहारिक क्लाइंटसाइड संस्करण आयु असंगतता आईपी
कुल भारित अंक → मजबूत मानव संकेत
नोट यह डेमो है
fastpathऐसी नीति जो चलती है सभी दृश्यता के लिए डिटेक्टर . आरंभिक आउट सक्षम होने वाले वास्तविक उत्पादन में के तहत 10ms. यह यहाँ है क्योंकि डेमो मोड आरंभिक आउट को सभी योगदानों को दिखाने के लिए अक्षम करता है
LLM के साथ पूरा पाइपलाइन (डेमो मोड
तुलना के लिए, यहाँ demo नीति - LLM तर्क सहित पूरी पाइपलाइन असहमत होना:
{
"policy": "demo",
"isBot": false,
"isHuman": true,
"humanProbability": 0.87,
"botProbability": 0.13,
"confidence": 1.0,
"botType": "Scraper",
"riskBand": "Low",
"recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 13%)" },
"processingTimeMs": 1370,
"aiRan": true,
"detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral",
"VersionAge", "Inconsistency", "Heuristic", "HeuristicLate", "Llm"],
"detectorCount": 10
}
सेकंड में 10 детектор - एलएलएम चला और असहमत गुर्दे के साथ
| डिटेक्टर | प्रभाव | वज़न | МSK3 | भारित | ||||
|---|---|---|---|---|---|---|---|---|
| एलएलएम | +0.85 | 2.5 | +2.13 à¤à¥à¤°à¥à¤ | |||||
| ग्रीष्मकालीन सभी प्रमाणों के साथ मानव | ||||||||
| शल्यचिकित्सा मानव संभाव्यता | ||||||||
| उपयोक्ता अभिकर्ता अभिकर्ता सामान्य दिखाई देता है | ||||||||
| शीर्षिका हेडर सामान्य दिखाई देते हैं | ||||||||
| व्यवहारिक अनुरोध पैटर्न सामान्य दिखाई देते हैं | ||||||||
| क्लाइंट साइड कोई अंगुली छाप नहीं | ||||||||
| संस्करण आयु ब्राउज़र | ||||||||
| असंगतता कोई हेडर नहीं | ||||||||
| आईपी स्थानीय होस्ट |
यह दिलचस्प मामला है - एलएलएम इसे एक संभावित बोट के रूप में चिह्नित किया जबकि सभी स्थिर डिटेक्टरों ने कहा मानव
{
"ai.prediction": "bot",
"ai.confidence": 0.85,
"ai.learned_pattern": "Browser string suggests Chrome, common in bots. Presence of cookies and a specific referer also points to a potential bot."
}
LLM का तर्क एक सिग्नल के रूप में रिकॉर्ड किया जाता है जो सीखने की प्रणाली में फिर से फीड करता है
सूचना
दो बार हियूरिस्टिक रन सभी डिटेक्टरों से पहले - आरंभिक ( सभी प्रमाणों के बाद ) & #44; और बाद में ( & #39; दोनों ने कहा कि ""\human"\ with '88%\ confidence.\
एलएलएम असहमति इसका भारित प्रभाव आंशिक रूप से हीरिस्टिक प्रतिकूल होता है
कोई औठाछाप नहीं ClientSide ने returned 0 because JS hadn
अंतिम निर्णय: अनुमति दें LLM के साथ भी संदिग्धता के साथ-साथ संयुक्त साक्ष्य मानव के पक्ष में है
botType: "Scraper"फ्लैग का अर्थ है यह देख रहा है
श्रेणी विभाजन तनाव को दर्शाता है
श्रेणी | अंक | | | भार || | नोट्स |----------|-------|--------|-------| | शल्यचिकित्सा Strong human signal | | एआई LLM का कहना है कि बोट उपयोगकर्ता अभिकर्ता हेडर व्यवहारिक क्लाइंटसाइड संस्करण आयु असंगतता आईपी
कुल भारित अंक मानव जीतता है, लेकिन एलएलएम का मतभेद चिह्नित किया गया है
प्रमुख अंतर्दृष्टि जब वे असहमत होते हैं, तब प्रमाणों को भारित किया जाता है और बहुसंख्यक जीतता है, लेकिन अल्पसंख्यक राय सीखने के लिए रिकॉर्ड की जाती है
महत्वपूर्ण यह verbose आउटपुट डेमो है।
X-Bot-Confidence,X-Bot-RiskBand, आदिcontext.IsBot()जाँच करें. पूरा JSON त्रुटि सच्याना और अनुकूलन के लिए है
परिणाम का उपयोग
if (context.IsBot())
return Results.StatusCode(403);
var score = context.GetBotConfidence(); // 0.0-1.0
var risk = context.GetRiskBand(); // Low/Elevated/Medium/High
अंतिम बिन्दुओं को सुरक्षित करना
app.MapGet("/api/data", Secret).BlockBots();
app.MapGet("/sitemap.xml", Sitemap)
.BlockBots(allowVerifiedBots: true);
जोखिम स्तर कार्य का मार्गदर्शन करते हैं
जोखिम | विश्वसनीयता | -------- | ---------- | ------------------ | कम | उन्नयनित | | 0.3-0.5 | || | लॉग | / | दर मध्यम उच्च
अभियांत्रिकी पता लगाना (वैकल्पिक
आवश्यक नहीं है - लेकिन उन्नत स्वचालन पकड़ने के लिए उपयोगी
शल्यचिकित्सा detector (Fast
सिस्टम में एक हियूरिस्टिक डिटेक्टर शामिल है जो गतिशील रूप से सीखे हुए वजनों के साथ लॉजिस्टिक रिग्रेसन का प्रयोग करता है
विशिष्ट लंबितता 1-5ms
{
"BotDetection": {
"AiDetection": {
"Heuristic": {
"Enabled": true,
"LoadLearnedWeights": true,
"EnableWeightLearning": true
}
}
}
}
विशेषताएँ गतिशील रूप से निकाली जाती हैं - नए पैटर्न स्वचालित रूप से डिफ़ॉल्ट वजन प्राप्त करते हैं और समय के साथ सीखते हैं अपने यातायात
Ollama LLM (Deep Reasoning)
evasive bots को पकड़ता है जो तेजी से नियमों के लिए दिखते हैं ओलामाCity name (optional, probably does not need a translation) स्थानीय LLM निष्कर्ष के लिए.
ollama pull gemma3:1b
{
"BotDetection": {
"AiDetection": {
"Provider": "Ollama",
"Ollama": { "Model": "gemma3:1b" }
}
}
}
AI है असफल-safe यदि यह नीचे हो जाता है तो -
सीखने की प्रणाली
स्थिर ब्लॉक सूची अस्थिर हो जाती है तो यह प्रणाली सीखता है
flowchart LR
N[Neutral] -->|repeated bad activity| S[Suspect]
S -->|confirmed| B[Blocked]
B -->|no activity| S
S -->|stays clean| N
style B stroke:#ef4444,stroke-width:2px
style S stroke:#eab308,stroke-width:2px
style N stroke:#10b981,stroke-width:2px
पैटर्न समय के साथ टूटते हैं
- आईपी पुनः माना जाता है
- गलत कॉन्फ़िगरेशन किए गए स्क्रिप्टों को निश्चित किया जाता है
- यातायात स्वाभाविक रूप से बदलता है।
टूटने के बिना आप हमेशा के लिए वैध उपयोगकर्ताओं को अवरोधित करें
{
"BotDetection": {
"Learning": {
"Enabled": true,
"ScoreDecayTauHours": 168,
"GcEligibleDays": 90
}
}
}
अपने अनुप्रयोग के लिए YARP गेटवे: किनारा संरक्षण
वहाँ’ भी है डोकर-पहली YARP उल्टी प्रॉक्सी जो खोज चलाता है पहले अनुरोध आपके एप्लिकेशन पर चिपकते हैं
flowchart LR
I[Internet] --> G[YARP Gateway]
G -->|Human| App[Your App]
G -->|Search Engine Bot| App
G -->|Malicious| Block[403]
इसे एक लाइन में चलाएँ
docker run -p 80:8080 \
-e DEFAULT_UPSTREAM=http://your-app:3000 \
scottgal/mostlylucid.yarpgateway
पर काम करता है
- लिनक्स
- मैकओएस
- विंडोज़Comment
- ARM (
अनुकूल रूटिंग के लिए
services:
gateway:
image: scottgal/mostlylucid.yarpgateway
volumes:
- ./yarp.json:/app/config/yarp.json
एक उचित उत्पादन कॉन्फ़िग
{
"BotDetection": {
"BotThreshold": 0.7,
"BlockDetectedBots": true,
"EnableAiDetection": true,
"Learning": { "Enabled": true },
"PathPolicies": {
"/api/login": "strict",
"/sitemap.xml": "allowVerifiedBots"
}
}
}
यह कहाँ जा रहा है
यह भाग है अगले भागों को गहराई में खोना
- भाग 2: कैसे बोट्स स्मार्ट हो गया - बोट पता लगाने में नया सीमांत
- भाग 3: व्यवहार विश्लेषण
- भाग 4: क्लाइंट
- भाग 5: वास्तविक में सीखने के वजनों को हृदीय डिटेक्टर
- भाग 6: एलएलएम पहचान आंतरिक
- भाग 7: सीखने की प्रणाली को सही ढंग से समझा गया
भावी रोडमैप
- वैक्टर एम्बेडिंग के साथ RAG-आधारित पैटर्न मिलान
- स्थानीय लघु मॉडल निष्कर्ष के माध्यम से लामाशर्प / ऑनिक्स
- नवीन आक्रामक पैटर्नों को पहचानने के लिए सांकेतिक समानता
अगर आप एक बोट डिटेक्टर चाहते हैं तो आप कर सकते है समझना, बढ़ाना, और कहीं भी चलानायह श्रृंखला आपके लिए है
शैक्षिक & उद्योग पठन
अगर आप जानना चाहते हैं कि बोट पता लगाने में क्यों कठिन है और क्या अनुसंधान कहता है
बोट पता लगाना & Evasion
- बोट ट्रैफिक की स्थिति रिपोर्ट - Real-world bot attack data
- OWASP: बोट प्रबंधन - सुरक्षा मूलभूतियां
- Cloudflare: बोट पता लगाने की समीक्षा - उद्योग परिप्रेक्ष्य
नेटवर्क फ़िंगरप्रिंटिंग
- JA3: SSL/TLS क्लाइंट फ़िंगरप्रिंटिंग TLS हस्ताक्षर मिलान (मानक
- TCP/IP फ़िंगरप्रिंटिंग - नेटवर्क
- HTTP/2 फिंगरप्रिंटिंग तकनीक एचटीटीपी में ब्राउज़र कैसे भिन्न होते हैं
व्यवहार विश्लेषण & असामान्यता पहचान
- समय श्रृंखला डेटा में बाहरी पता लगाना (ACM) - सांख्यिकी आधार
- Intrusion Detection में मार्कव चेन - राज्य संक्रमण मॉडलिंग
LLM-Powered Threats & Data Poisoning
- मशीन अधिगम पर डेटा विषाक्त आक्रमण - why scrapers target your data
- बड़े भाषा मॉडलों से प्रशिक्षण डेटा निकालना (arXiv: 2302.07933) - why bots want your content
- वेब स्काइपिंग और कॉपीराइट मुद्दे - विधिक कोण
हेडレス ब्राउज़र पता लगाना
- पुppeteer & Playwright Detection - सिररहित ब्राउज़रों को कैसे पहचाना जाता है
- कैनवास फ़िंगरप्रिंटिंग & Evasion - क्लाइंट
परियोजना लिंक
- GitHub: पूर्ण डक https://github.comMSC2scottgalM SK3stylobot
- नूगेट पैकेज संस्थापित करें https://www
- डॉकर हब YARP गेटवे https://hubM SK1docker.comMST3rMSC4scottgalMSL5stylobotMSR6gateway
गैर लाइसेंस - सार्वजनिक डोमेन. आप चाहें जिस तरह इस्तेमाल करें