Back to "स्टिलियोबोट रिलेस शृंखला"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

ASP.NET Bot Detection Machine Learning Performance StyloBot

स्टिलियोबोट रिलेस शृंखला

Wednesday, 13 May 2026

हेड्स अप: यह एक तंत्रिकाओं के लिए है. यहM SK2 स्टिलियोबोट में एक गहरी तकनीकी डुबोकी है ' अनुकूलन सीखने की प्रणाली। Mostlylucid.BotDetection और समान मशीन के लिए संकेतक। - सीखने का निर्माण करता है ताकि ML पाठकों को एक प्रविष्टि बिंदु प्राप्त हो।

ड्राफ्ट

यह स्टीलोबोट रिलीज श्रृंखला में एक कार्यशील ड्राफ्ट है

स्टिलियोबोट रिलेस शृंखला

  1. व्यवहार, पहचान नहीं - क्यों StyloBot ग्राहक व्यवहारिक रूप से मॉडल करता है
  2. व्यवहार-Aware ASP.NET UI - सर्वर-\ऐसे पता लगाने के परिणाम पर सतह दे दिया
  3. लंबे समय तक चलाने वाले नेट सेवाओं में असीमित विकास का पता लगाना और स्थिर करना - विश्वसनीयता अनुशासन जो उत्पादन में इंजन को नीरस बनाए रखता है
  4. व्यवहार-Aware TypeScript UI - Express , Fastify, और ब्राउज़र घटक
  5. साइडकार वास्तुकला - कैसे पता लगाने की इंजन गैर--.NET स्टाक से जुड़ता है
  6. तेजी से सीखना अनुकूलन सीखने की प्रणाली
  7. उस चीज़ का परीक्षण जो सफल नहीं हो रही है - सत्यापन अनुशासन
  8. स्टिलियोएक्सट्रैक्ट - एक स्थानीय सीखने के HTML को मार्कडाउन रूपांतरक में - एचटीएमएल\→\मार्कडाउन परत जो डिटेक्टर के साथ जोड़ता है,\walker bug lucidVIEW पकड़ा\M SK3\ और कुत्तेfood लूप कि यह ईमानदार बना

व्यवहार मॉडल में है व्यवहार, पहचान नहीं; विश्वसनीयता अनुशासन में असीमित विकास का पता लगाना और स्थिर करना; स्रोत पर github.comM SK1scottgal/stylobot.


StyloBot इस के साथ परेशानी क्यों करता है

स्टिलियोबोट का सारा काम है मानव को बूट्स से बताना-वह करता है-, और सबसे बुनियादी स्तर पर यह ऐसा करता है कि एक औसत बूट कैसा दिखता है और एक औसत आदमी क्या दिखता हैं, इसका चित्र बनाकर। यथार्थता पहली बार बेहतर होती है (इस के क्लस्टरिंग पक्ष में शामिल है व्यवहार, पहचान नहींइस पोस्ट के बारे में है कि एक बार आप उन्हें centroids के साथ क्या होता है

यह तंत्र भी है जो StyloBot को मूर्खता से अलग स्थानों में लागू करने योग्य बनाता है।

एक डिटेक्टर जो प्रत्येक अनुरोध पर पूरी पाइपलाइन चलाता है पूरी तरह से, लेकिन कम लागत वाला है।

इस स्थान में अधिक परिचित नामों के विरुद्ध संदर्भ हेतु

| | स्थानांतरण | | | प्रति- | अनुरोध लागत || | क्या आप वापस पाते हैं |---|---|---|---| क्लाउडफ्लेर बोट प्रबंधन CHEQ / डेटाडॉम | | | सर्वर |- | साइड API कॉलआउट | | स्टेलोबोट ~10-50 μs Skip के माध्यम से गर्म किया गया 400-900 μs पूर्ण तीव्र पथ पाइपलाइन चलाने के लिएBotProbability, Confidence, RiskBand, ThreatScoredirectly in your handler |

किनारे उत्पाद मूल से पहले ब्लॉक में महान हैं। "; क्या वे नहीं कर सकते है अपने अनुप्रयोग को एक प्रति-- अनुरोध संभाव्यता प्रदान करना और आपके चेकआउट पृष्ठ को यह तय करने के लिए कि उससे क्या किया जाना चाहिए।

लिवर जो कैश को सुरक्षित करता है यह है नीति. निर्णय कैश एक द्वारा नियंत्रित होता है SignatureCacheOptions रिकॉर्ड करता है कि '\s पर सेट करता है \ -\ policy \ , \ so an admin endpoint can demand | 0.95 \ confidence and a 60- \ second freshness window while a content path accepts |0.7 | confidence over an hour . \ Same code \ {\displaystyle \mathbf {,},\ } different knobs \ (विभिन्न नोब्स) \ ASP.NET मध्यware, एक के रूप में जीआरपीसी पार्श्वगाड़ीCaddy प्लगइन के पीछे की प्रक्रिया में , या मे

इस पोस्ट का बाकी मशीनरी है जो कैश को सुरक्षित करता है।

मेटास्टेबल अंगुल छाप

Everything below anchors to "the fingerprintM SK1 so it'it's worth being precise about what that means here. व्यवहार, पहचान नहींTLS पर रेखांकन व्यवहारिक बदलें: एक भिन्न पथ अनुक्रम

जो अंगुलियों की छाप बनाता है मेटास्टबलस्थिर enough that an actor remains recognisable across short

यह गुण है कि पूरी सीखने की प्रणाली पर अवलंबित होती है. यदि अंगुलियों के अंक शोरपूर्ण होते हैं | ( | हर अनुरोध किसी जगह अनियमित ढंग से उतरता है |) EWMA औसतन कुछ भी नहीं Sharpen करेगा और कैश हमेशा गलत होगा | और drift पहचाना जा सकता है क्योंकि वास्तविक परिवर्तन किसी अन्य स्थिर पृष्ठभूमि के खिलाफ गति के रूप में दिखाई देता है

इस गुण को क्यों रखने के लिए संरचनात्मक तर्क (मानव ध्वनियुक्त, लेकिन संरचना में सुसंगत है, लेकिन रचना में गलत है व्यवहार, पहचान नहीं, और यदि यहाँ ज्यामिति में से कोई भी स्पष्ट नहीं है कि यह लेख पहले पढ़ने के लिए है एक बार यह दावा हाथ में है

thesis: detection should get better and cheaper the more you see

प्रत्येक अवलोकन दो बातें करता है-: यह केंद्रक को तीक्ष्ण बनाता है यह अंगुठा छाप के लिए आता है ( अक्षरता ), और यह प्रणाली को ऊँचा करता है ' \ यह विश्वास कि यह अंगूठा छाप उस केंद्रक की तरह व्यवहार करता है जो गति सक्षम करता है). \ एक अनुकूलन डिटेक्टर का हार्ड हिस्सा यह दोनों कर रहा है बिना पुराने गलतियों को स्थायी बनना छोड़ देता है\ .

एक बोट डिटेक्टर को दिन में लाखों बार एक ही महंगा सवाल पूछा जाता है यह अभिनेता अभी भी हम पहले से ही सीखा था की तरह व्यवहार कर रहा है यह था इन अनुरोधों के बहुत अधिकतर के लिए, सिस्टम को पहले से ही एक राय है. यह एक ही TLS अंगुली छाप देखा थाMSC2 एक ही शीर्षिका क्रमM SK3 एक समान उपयोगकर्ताMST4 अभिकर्ता परिक्रमण पैटर्नMSP5 दस मिनट पहले एक ही आईपी पड़ोसMSM6 और निष्कर्षित bot, 0.93वहाँ एक ही कर्ता पर पूरा पता लगाने की पाइपलाइन फिर चलाने का कोई बिंदु नहीं है जब तक कि उस कर्ता के बारे में कुछ प्रत्यक्ष रूप से बदल गया है

StyloBot' सीखने की प्रणाली उस विचार के चारों ओर निर्मित है। केंद्रक बनाता है और परिष्कृत करता है पहले स्थान पर. जब पाइपलाइन नहीं चलाता है, तो यंत्रित परिस्थितियों में पिछला स्थानन पुनः प्रयोग किया जाता है।

एक ओर ML यह है अनुकूलन संगणना तंत्रिका नेटवर्क में आरंभिक,\ Mixture\ -\ of-\ Experts gating\ M SK3\ cheap classifier first\ ,\ expensive classifier only when the cheap one\ MSC5\ its confidence is low\ MST6\ The detector pipeline is the expensive inference path\ MSP7\ per\ MSV8\ fingerprint cache is the cheap MSV9\ did we already learn this

स्मृति के चार स्तर

स्टिलियोबोट में सीखना परतबद्ध है इसलिए प्रत्येक स्तर एक अलग जीवनकाल के लिए अनुरूप होता है

  1. त्वरित इस रूप में वर्गीकृत नमूने की एक संक्षिप्त सूची ConfirmedBad में PatternReputation भंडारित करें. इनमें से एक के अनुरूप एक अनुरोध प्राथमिकता पर पाइपलाइन को छोड़ता है 3 किसी अन्य डिटेक्टर चलाने से पहले
  2. इंट्राः-request ब्लैकबोर्ड डिटेक्टर साझा में संकेत लिखते हैं BlackboardState.Signals अनुरोध के दौरान sink; बाद में डिटेक्टर उन संकेतों को पढ़ते हैं।
  3. इंटर-request reputation (minutes to days पैटर्न InMemoryPatternReputationCache प्रति ट्रैक्स EWMA ऑनलाइन अद्यतन और समय विघटन के साथ पैटर्न बोट स्कोर्स ReputationState (Neutral → Suspect → ConfirmedBad, प्लस ConfirmedGood, ManuallyBlocked, ManuallyAllowed) असमित संवर्धन और निष्कासन थ्रेसहोल्डों के साथ
  4. Per-fingerprint verdict cache (minutesM SK2 Per-actor memory: में जीवंत स्लाइडिंग विंडो SignatureCoordinator प्रत्येक पर्यवेक्षण अंगुलियों का अंकन करता है। SignatureVerdictGate.DecideAsync प्रत्येक अनुरोध पर यह पढ़ता है.

टियर 1 छोटा-पाईपलाइन को परिपथित करता है.\ टियर () \ 2\ इसके भीतर समकक्ष होते हैं\M SK4\ टयर () {\displaystyle ()} 3\ दिनों में जीवित रहने वाला लंबा स्मृति होती है\

flowchart LR
    classDef input fill:none,stroke:#3b82f6,stroke-width:2px
    classDef fast fill:none,stroke:#22c55e,stroke-width:2px
    classDef async fill:none,stroke:#a855f7,stroke-width:2px
    classDef store fill:none,stroke:#f59e0b,stroke-width:2px

    REQ["Incoming request<br\>(TLS fingerprint, headers, IP)"]:::input
    T1["Tier 1 · Fast-path reputation<br\>ConfirmedBad list<br\>priority 3, pre-pipeline"]:::fast
    T2["Tier 2 · Intra-request blackboard<br\>BlackboardState.Signals<br\>lifetime: one request"]:::async
    T3[("Tier 3 · PatternReputation<br\>EWMA + state machine<br\>lifetime: minutes to days")]:::store
    T4[("Tier 4 · SignatureCoordinator<br\>sliding window<br\>lifetime: minutes")]:::store
    PIPE["Detector pipeline<br\>(BlackboardOrchestrator)"]:::async
    OUT["Verdict"]:::fast

    REQ --> T1
    T1 -->|match| OUT
    T1 -->|no match| T4
    T4 -->|Skip| OUT
    T4 -->|Miss / Bias / Watchdog| PIPE
    PIPE <--> T2
    PIPE <--> T3
    PIPE --> T4
    PIPE --> OUT

EWMA: कैसे सिस्टम भूलता है

सिस्टम में प्रत्येक संख्यात्मक स्मृति में एक ही अद्यतन नियम का उपयोग करता है Helpers/Ewma.cs:

public static class Ewma
{
    /// <summary>new = (1 - alpha) * previous + alpha * observation</summary>

    public static double Update(double previous, double observation, double alpha)
        => (1.0 - alpha) * previous + alpha * observation;
}

यह पूरी बात है alpha नए अवलोकन पर भार है 1 - alpha पिछली काल की जड़ता है

पैटर्न प्रतिष्ठा इसे सीधे उपयोग करता है PatternReputationUpdater.ApplyEvidence:

// EMA update: alpha clamped to [0,1] preserves EMA semantics (alpha > 1 inverts
// the old score contribution).
var alpha = Math.Min(_options.LearningRate * evidenceWeight, 1.0);
var newScore = Ewma.Update(decayed.BotScore, label, alpha);

LearningRate defaults to 0.1, so a single observation moves the score by 10% of the gap to that observation

एक ओर ML EWMA = क्लासिक एक्सपोनेन्शल गतिशील औसत जो दिखाता है आदम (the β₁, β₂ गति और विपरिवर्तन संग्राहक पॉलिक औसतबैच सामान्य चल औसत में ,variance TD(0) मूल्य अद्यतन (V ← V + α(r + γV' - V)). α = 0.1 यहाँ वही रेंज में है जो आप देख सकते हैं गति बफर के लिए ' slow enough that one bad observation can

हमने इस अद्यतन को स्पष्ट से ऊपर उठाया, लेकिन, अधिकतम संभाव्यता को दर्शाने के गलत विकल्प को भंडारित करने के लिए, एमएसके0, परन्तु, एम्सके1, इतिहास भंडार में एक अधिकतम, एम एसके4 का अधिकतम, एक एकल स्पाइक पिन एक नमूना को हमेशा के लिए एमएसका6 पर छोड़ देता है।

क्षय स्वयं नमूने तक विस्तारित होता है ReputationOptions कोड से डिफ़ॉल्ट

public double ScoreDecayTauHours { get; set; } = 3;             // generic
public double SupportDecayTauHours { get; set; } = 6;
public double ConfirmedBadScoreDecayTauHours { get; set; } = 12; // ConfirmedBad
public double ConfirmedBadSupportDecayTauHours { get; set; } = 24;
public int GcEligibleDays { get; set; } = 90;

एक दिन में नहीं देखा गया है कि एक नमूना अपने समर्थन का अधिकांश खो दिया है। Neutral कूड़ा है ConfirmedBad patterns get a longer tau (they earned their status through strong evidence and shouldn

एक ओर ML प्राप्ताङ्क-DecayM SK1toward-prior step is first ओर्नस्टाइन आकार): कोई नया साक्ष्य नहीं है, अंक दर पर पूर्व की ओर वापस लेता है 1/τ.

हाइस्टेरेसिस राज्य मशीन में निर्मित है ReputationOptions:

संक्रमण स्कोर थ्रेसहोल्ड
Neutral → Suspect ≥ 0.6 ≥ 10
Suspect → ConfirmedBad ≥ 0.9 ≥ 50
Suspect → Neutral ≤
ConfirmedBad → Suspect ≤
Neutral → ConfirmedGood ≤ 0.1 ≥ 100
stateDiagram-v2
    direction LR
    [*] --> Neutral
    Neutral --> Suspect : score &ge; 0.6<br/>support &ge; 10
    Suspect --> ConfirmedBad : score &ge; 0.9<br/>support &ge; 50
    Suspect --> Neutral : score &le; 0.4
    ConfirmedBad --> Suspect : score &le; 0.5<br/>(support &ge; 100 OR<br/>support &lt; 50)
    Neutral --> ConfirmedGood : score &le; 0.1<br/>support &ge; 100
    ConfirmedBad --> [*] : 90 days unseen<br/>+ neutral + low support
    Neutral --> [*] : 90 days unseen<br/>+ low support

    note left of ConfirmedBad
        Fast-path eligible
        (Tier 1 short-circuit)
    end note
    note right of Neutral
        Promote at score 0.9 / sup 50
        Demote at score 0.5 / sup 100
        Wider gap = oscillation-resistant
    end note

promote थ्रेसहोल्ड (0.9) और demote थ्रेस्होल्ड ConfirmedBad है जानबूझकर : यह \ ' \ s एक oscillation | - | suppression band \ . | Anything that flips between Suspectकेवल एक दिशा में पाया गया प्रमाण सीमा को पार करता है

एक ओर ML यह एक है स्मिट ट्रिगरराज्य संक्रमण के लिए symmetric थ्रेसहोल्ड्स

आप अर्जित करने के लिए verdict cache: गति

per-fingerprint स्लाइडिंग विंडो परत है जो अनुरोध गर्म पथ अब सीधे परामर्श करता है SignatureVerdictGate.DecideAsync पूरा निर्णय है और यह

public async Task<GateDecision> DecideAsync(
    string? signature, SignatureCacheOptions options, CancellationToken ct = default)
{
    if (!options.Enabled || string.IsNullOrEmpty(signature))
        return new GateDecision(GateAction.Miss, null);

    var verdict = await _coordinator.TryGetVerdictAsync(signature, ct);
    if (verdict is null)
        return new GateDecision(GateAction.Miss, null);

    if (verdict.Confidence < options.BiasMinConfidence)
        return new GateDecision(GateAction.Miss, verdict);          // too noisy

    var ageSeconds = (DateTime.UtcNow - verdict.LastSeenUtc).TotalSeconds;

    var skipEligible =
        verdict.Confidence >= options.SkipMinConfidence
        && ageSeconds <= options.SkipMaxAgeSeconds;

    if (skipEligible && !ShouldRefresh(signature, options.SkipSamplingRate))
        return new GateDecision(GateAction.Skip, verdict);          // cache hit

    var biasEligible = ageSeconds <= options.BiasMaxAgeSeconds;
    return new GateDecision(biasEligible ? GateAction.Bias : GateAction.Miss, verdict);
}

per-policy थ्रेसहोल्ड्स से SignatureCacheOptions डिफ़ॉल्ट दिखाया गया

public double SkipMinConfidence { get; init; } = 0.85;
public int    SkipMaxAgeSeconds { get; init; } = 300;        // 5 min
public double BiasMinConfidence { get; init; } = 0.30;
public int    BiasMaxAgeSeconds { get; init; } = 86_400;     // 24 h
public double SkipSamplingRate  { get; init; } = 0.05;       // 5 %

विश्वास स्वयं में व्युत्पन्न होता है SignatureCoordinator.TryGetVerdictAsync नमूना आकार से , पूर्ण विश्वास के साथ 10 अवलोकनों और रेखात्मक रम्प नीचे | : |

var confidence = Math.Min(1.0, behavior.RequestCount / 10.0);

तो SkipMinConfidence = 0.85 का अर्थ है कि एक अंगुली छाप को ~9 वर्तमान विंडो में अवलोकनों की आवश्यकता होती है इससे पहले कि यह Skip हो सकता है

चार कार्य

  • मिस इस अंगुल छाप के लिए कोई उपयोग योग्य रिकार्ड नहीं है BiasMaxAgeSeconds. पूरी डिटेक्टर पाइपलाइन चलाता है
  • पक्षपात एक रिकार्ड में मध्यम विश्वास के साथ मौजूद है।
  • Skip रिकार्ड हाल ही में है और इतना विश्वास है कि पाइपलाइन योगदान सीमांत होगा
  • वॉचडोग Skip-eligible cache hit, but the variance watchdog detected something atypical
flowchart TD
    classDef input fill:none,stroke:#3b82f6,stroke-width:2px
    classDef decision fill:none,stroke:#f59e0b,stroke-width:2px
    classDef fast fill:none,stroke:#22c55e,stroke-width:2px
    classDef slow fill:none,stroke:#a855f7,stroke-width:2px
    classDef trip fill:none,stroke:#ef4444,stroke-width:2px

    REQ["Request arrives"]:::input --> LOOKUP{"TryGetVerdictAsync<br\>(sliding window<br\>+ family fallback)"}:::decision
    LOOKUP -->|"null OR low-conf OR stale"| MISS["MISS<br\>full pipeline"]:::slow
    LOOKUP -->|"record found"| CONF{"conf ≥ 0.85<br\>+ age ≤ 300s?"}:::decision
    CONF -->|"no"| BIAS["BIAS<br\>pipeline + prior contribution"]:::slow
    CONF -->|"yes"| REFRESH{"In 5% refresh<br\>(hash bucket)?"}:::decision
    REFRESH -->|"yes"| BIAS
    REFRESH -->|"no"| WD{"VarianceWatchdog<br\>OK?"}:::decision
    WD -->|"tripped"| TRIP["WATCHDOG-TRIP<br\>X-StyloBot-VerdictSource = pipeline<br\>X-StyloBot-WatchdogTrip = reason"]:::trip
    WD -->|"ok"| SKIP["SKIP<br\>X-StyloBot-VerdictSource = cache<br\>orchestrator bypassed"]:::fast

    MISS --> UPDATE[("Update sliding window<br\>+ RecordObservation")]:::slow
    BIAS --> UPDATE
    TRIP --> UPDATE
    SKIP --> UPDATE

मिडलवेयर बाहर निकलता है X-StyloBot-VerdictSource (cache या pipeline) और X-StyloBot-WatchdogTrip जब लागू हो तो (reason string

Skip क्या होता है जब वहाँ कोई नया सीखने के लिए कुछ नहीं है।

एक योगदान के रूप में फ़ैश निर्णय नहीं

पुनर्प्राप्ति यांत्रिकी में प्रवेश करने से पहले-, फ्रेमिंग जो उन्हें सुसंगत बनाता है-: कैशित निर्णय एक भंडारित उत्तर नहीं होता है सिस्टम अंधेरी रूप से पुनः उपयोग करता है। अंशदान, विश्वास और आयु द्वारा भारित FingerprintPriorContributor.ContributeAsync पूरी मशीन है

var horizon = AgeDecayHorizon;                                 // default 86,400s
var decay = horizon > 0.0 ? Math.Max(0.0, 1.0 - age / horizon) : 1.0;
var effectiveWeight = conf * WeightMultiplier * decay;

if (effectiveWeight <= 0.0) return _emptyResult;

var delta = 2.0 * (prob - 0.5);   // map [0,1] probability to [-1,+1] confidence delta

var contribution = new DetectionContribution
{
    DetectorName = DetectorName,
    Category = DetectorName,
    ConfidenceDelta = delta,
    Weight = effectiveWeight,
    Reason = $"Cached fingerprint verdict (prob={prob:F2}, conf={conf:F2}, age={age:F0}s)"
};

एक 30-सेकेंड-सेकेण्डसेकेन्डसेकेंन्डसेमेंअभिज्ञतापूर्वककानिर्णय-0.9सेकेल्डसेकेन्जरसेअभिभिज्ञततापूर्वकअभिन्नसेकेबलसेकेकण्डसेमेनेअभिध्य्य्य्यीय्य्यय्य्य्या4सेकेंडरसेकेनियरसेकेपर्य्यिय्या5सेकेयनियरसेसेकेनरसेकेडीईसेकेपीडीईसीपीडीएपीडीआईसीपीटीपीडीडीईसापीडीजीपीडीटीपीटीटीपीपीडीएफपीडीपीडीएमएसीपीडीओपीडीएलपीडीएनडीईपीडीयूपीडीएसआईपीडीसीपीजीपीटीबीडीई पीडीई सीपीडी आईपीडी एपीडीआरपीडी ईपीडी आइपीडी एनडीईआईपीटीआईपी डीईपीआईपीजी बीडीआईपीडाईपीडी टीईपीटीईपीजी वीडीआई पीडीआईटीपीजी पीडीडीआईआईपीपीजी जीडीआईवीपीडी

एक ओर ML यह वास्तव में है बेयसीपहले (कैच किया गया निर्णय | ) |× | संभाव्यता | ( | यह अनुरोध | ' | साक्ष्य | ) | → | posterior decay = 1 - age/horizon शब्द एक भूलकारक के रूप में एक ही भूमिका निभाता है पुनरावर्ती बेयजियन अनुमान; पुराने पूर्ववर्ती शक्ति खोते हैं तो संभावना पहले आयु के रूप में प्रभुत्व रखता है RequestContributionDelta (यह अनुरोध किया गया परिवर्तन चलती पीछला पेजरी के लिए नहीं कच किए गए निर्णयों पर कच्चे per-request संभाव्यता के बजाय delta यह हिस्सा है कि वास्तव में नया सूचना है

कैसे गलत सकारात्मक don't संयोजन

इस बिंदु तक सिस्टम खतरनाक रूप से कैश ध्वनि देता है।

flowchart TD
    classDef store fill:none,stroke:#f59e0b,stroke-width:2px
    classDef defense fill:none,stroke:#22c55e,stroke-width:2px
    classDef recover fill:none,stroke:#a855f7,stroke-width:2px

    CACHE[("Cached verdict<br\>(EWMA posterior + sample count)")]:::store

    D1["Direction-agnostic confidence<br\>caches confident verdicts,<br\>not just bot verdicts"]:::defense
    D2["EWMA, not MAX<br\>one spike contributes 10%,<br\>not 100%"]:::defense
    D3["Sample-size gating<br\>full trust at 10 samples,<br\>Bias below that"]:::defense
    D4["Variance watchdog<br\>IP rotation, rate spike,<br\>path divergence"]:::defense
    D5["Skip-path observation<br\>cache hits still record,<br\>history stays whole"]:::recover
    D6["Refresh sampling<br\>5% of Skips downgraded<br\>to Bias by signature hash"]:::recover

    D1 --> CACHE
    D2 --> CACHE
    D3 --> CACHE
    D4 --> CACHE
    D5 --> CACHE
    D6 --> CACHE

दिशा SkipMinConfidence के विरुद्ध जाँच किया जाता है verdict.Confidence, के खिलाफ नहीं verdict.BotProbability. एक निश्चित--बॉट निर्णय और एक निश्चित–-मानव निर्णय समान रूप से Skip के लिए पात्र हैं। विश्वासी निर्णयों" (प्रणाली किसी भी तरह के साक्ष्य की ओर पक्षपात करती है

EWMA, नहीं MAX. एक ही उच्च '-' संभाव्यता का अवलोकन चल रहे अंक को इस द्वारा ले जाता है α = 0.1 उस अवलोकन के अंतर से . एक असली हमलावर तेजी से प्रमाण इकट्ठा करता है क्योंकि हर पर्यवेक्षण विरोधी है. एक वैध दर्शक जो एक अनुरोध के लिए एक स्करपर की तरह दिखता है बाद में पर्यवहारों पर भयानक की ओर वापस विकृत होता है

नमूना confidence = min(1, request_count / 10). नीचे ~9 अवलोकनों, यहां तक कि एक मजबूत पीछला पेजरी को Skip के बजाय Bias के लिए रखा जाता है

एक ओर ML यह एक है पूर्व संकुचनजब तक पर्याप्त प्रमाण इकट्ठा नहीं हो जाता है, :,'. Same reason यूसीबी बैंडिट एक नमूना शामिल करें n, व्यापक विश्वास अंतराल

वेरिएन्स वॉचलडॉग एक विश्वसनीय के साथ भी VarianceWatchdog.Check तीन स्वतंत्र परीक्षण के विरुद्ध चलाता है VarianceWatchdogOptions डिफ़ॉल्ट

public int    IpRotationWindowSeconds { get; init; } = 300;   // same fingerprint, new /24
public double RateSpikeMultiplier     { get; init; } = 10.0;  // last minute vs rolling 5
public bool   CheckPathCentroid       { get; init; } = true;  // never-seen path family

पथ-विभिन्नता जांच को कम से कम आवश्यक है।

if (options.CheckPathCentroid && hist.PathFamilyCount >= PathFamilyBaseline)
{
    var family = PathFamily(ctx.Request.Path.Value);
    if (family is not null && !ContainsFamily(hist, family))
        return new WatchdogResult(true, $"path-divergence:{family}");
}

कोई भी एक यात्रा और पाइपलाइन ताजा चलाता है ; प्रतिक्रिया लेती है X-StyloBot-WatchdogTrip: ip-rotation:1.2.3.0->5.6.7.0 या जो भी फायर किया गया है

एक ओर ML देखdog है अवधारणा-ड्राइप पता लगाने एक अंगुली छाप के लिए. शास्त्रीय अनुरूप हैं एडविन, पृष्ठ–Hinkley, और डीडीएमइन सभी से पता चलता है कि एक ऑनलाइन धारा के वितरण में काफी परिवर्तन हो गया है कि मौजूदा मॉडल अब विश्वसनीय नहीं है।

छोड़ें जब भी गेट पाइपलाइन को छोड़ता है, middleware अभी भी अनुरोध रिकॉर्ड करता है

_watchdog.RecordObservation(precomputedSig, clientIp, pathStr);
_ = _signatureCoordinator.NotifyObservationAsync(
    precomputedSig, pathStr, v.BotProbability, context.RequestAborted);

यह तथ्य कि पता चलाने को छोड़ दिया गया है, नहीं create a hole in the per-fingerprint history

नमूना ताजा करें. ShouldRefresh विनिर्धारित रूप से Skip के एक कॉन्फ़िगर किए जा सकने वाले भिन्न को ह्रास करता है- Bias में पात्र अनुरोध इस प्रकार पाइपलाइन चलाता है और जीवित रिकॉर्ड को ताज़ा करता हैDeterministicBucket.ShouldFire), तो एक ही क्लाइंट से वापसी समान रूप से भूमि लेता है ; समय के साथ प्रत्येक अंगुली छाप एक आवधिक पूर्ण पुनः प्राप्त करता है

एक ओर ML यह एक निर्धारणात्मक संस्करण है ε-कृपण अन्वेषण मजबूती सीखने से : अधिकांश समय मौजूदा नीति का उपयोग करता है |( |Skip | ), | कुछ समय खोज करने की लागत का भुगतान करता है

Entity-family fallback जब एक अंगुली छाप घूमती है और उसके नए पहचान के पास अपना कोई कैशित निर्णय नहीं होता है लीडन क्लस्टर एन्कर व्यवहारिक मॉडल से TryGetVerdictAsync:

csharp if (!_signatureCac

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.