mostlylucid.botdetectionM SK1 Puolustus Scrapereiden vastustamiseen (Part 1) (Suomi (Finnish))

mostlylucid.botdetectionM SK1 Puolustus Scrapereiden vastustamiseen (Part 1)

Monday, 08 December 2025

//

11 minute read

Scraperit alkavat käyttää AI:tä todellisten käyttäjien jäljittämiseksi, joten olen rakentanut robot-detektorin, joka oppii mukautumaan ja taisteli vastaan.

Keskeinen käsite: Behavioural Routing Tämä mahdollistaa uuden kategorian -, jossa läpinäkyvät , mukautettavat YARP-portaali, botit eivät koskaan pääse backend-ympäristöönne . tai käyttäkää välineitä rakentamaan käyttäytymissuuntauksia suoraan app-rakenteenne tasoon

NuGet GitHub Docker


Miksi tämä on olemassa

Bot-tutkimuksesta on hiljattain tullut yksi nykyaikaisen verkkotekniikan vaikeista ongelmista.

Ei siksi, että robotit olisivat älykkäämpiä - vaan koska AI teki mahdottomaksi todellisen käyttäjäkäytännön jäljittämisen:

  • Sijoituspalvelun kiertäminen
  • Täsmälleen pätevät sormenjälmät
  • Realistinen hiirenkulku
  • JavaScriptin toteuttaminen
  • Hyväksyminen, kun estetään

Kaupalliset ratkaisut ratkaisevat tämän, mutta ne ovat kalliita. Monti on tyypillistä.

Halusin jotain muuta:

  • Avoimuus
  • Paikallinen
  • Ymmärrettävä
  • Laajentaminen on helppoa
  • Halpakäyttöinen (kylläM SK1 jopa Raspberry Pi'issä

Näin minä tein mostlylucid.botdetection - modulaarinenM SK1 oppimisbot-detection engine for .NET.

Alku oli yksinkertainen…, ja sen jälkeen se kehittyi paljon kiinnostavammaksiM SK1



Konkreettinen esimerkki (Miltä tämä tosiasiassa saa

Tässä on todellinen skenaario maailmanlaajuisesti

A scraper spoofs:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120

Vaikuttaa legitiimiltä.

Mutta se unohtaa otsikko Chrome lähettää aina:

Sec-Fetch-Mode

Ja sen Accept-Language header doesn’t match the claimed localeM SK1

Ja pyynnön määrä on selkeästi automatisoitu.

Yksi signaali on hyvä. Toinen epäilyttäväM SK1 Kolmas malli.

Järjestelmä liikkeelle panee sen alle 100 millisekunnin - ei tarvita AI-tekniikkaa

Tämä on koko suunnittelun perusta. älkää luotako yhteen suureen järjestelmään “bot tai ei-botM SK2malliin .Lisätetyt todisteet


Järjestelmän filosofia

Keskeisenä asiana on, että tämä hanke ei ole missään nimessä "bot detection" -hanke, vaan liikennettä pidetään elävänä järjestelmänä eikä eristettyjen pyyntöjen virtana.

Nykyaikaiset romuttajat käyttäytyvät pikemminkin sopeutumiskykyisiin organismeihin nähden.

Ajatus on yksinkertainen: tarkkailusignaaleja, , yhdistää ne,, antaa niille vuorovaikuttaa,M SK3 mukautua ajan kuluessa,. yhden ainoan järjestelmän sijasta,MSC5kolibri,MST6ei,MSP7koppeli,MSV8tarkastelu,MSL9 koneesta tulee pienten havaintolaitteiden verkosto,MSR10 kukin osallistuu todisteisiin yhteiseen taulukkoon,MTR11 jossa korkeampien järjestelmien käyttäytyminen voi ilmetä,MRT13 politiikat muuttuvat koostettavissa oleviksi virtauksiksi,MRL14, ei vaikeaksi,MTL15, kodifioituja sääntöjä,MKR16, maine muuttuu asteittain sen sijaan, että muuttuisi tilanteeseen.MTR17, AI on vain toinen osallistuja,MHR18, ei monolitti.

Järjestelmä on rakennettu avoimeksi, selkeytettäväksi , laajennettavaksi, ja itsenäiseksiM SK3 korjaamiseksiMSC4 pitkän aikavälin tavoitteen kanssa, jonka mukaan järjestelmä toimii vähemmän kuin palomuuri ja enemmän kuin immuunijärjestelmä.


Miten se toimii ( Lyhyesti sanottuna

Pyynnöt kulkevat useiden pienten havaintolaitteiden läpi, kukin antamaan pienen osan todisteistaM SK1

Ajatelkaa sitä lentokentän turvatarkastuspisteenä.

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

Nopea tie (< 100msM SK2

Synchronisoidaan. Ei’estetä sovelluksenne hitauttaM SK2

  • Tunnetut bot-mallit
  • Missing headers real browsers always send
  • Datacenter IP:t (AWS/AzureM SK2GCP )
  • Määrärahat
  • UA:n + otsikoiden välinen epäjohdonmukaisuus

Tämä kiinnittää 80% bots instantly.

Hidas tie (Async)

Käy taustalla.

  • Heuristinen malli opetettujen painojen avulla
  • LLM:n perusteluja käyttäen Ollama
  • Muodon maineen päivittäminen
  • Unohdetaan pysähtyneet signaalit

Tämä kiinnittää mukautuvia roboteja -, joita useimmat ihmiset ajattelkaa he'pyytävät M SK1regexin kanssa käyttäjällä -Agentilla".


Yritä se 10 sekunnissa

dotnet add package Mostlylucid.BotDetection
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddBotDetection();

var app = builder.Build();
app.UseBotDetection();
app.Run();

Se’si se .Kaikki toimii sääntöjen mukaisestiM SK2


Mitä se havaitsee

tarkistaa mitä se löytää
käyttäjä-Agent Tunnetut robotit, kirjastotM SK2 scraperit
Headerit Missing security headers
IP Pilvi Hostit, jotka teeskentelevät olevansa
Taso automaattiiskut
Johdonmukaisuus “Chrome/120” ilman Chromea

Johdonmukaisuus on sleeper-ominaisuuksia - nykyaikaiset robotit voivat pettää yksi signaali, mutta yleensä epäonnistuu ristissä-signaalijohdonmukaisuusM SK1


Todellisen havaitsemisen tulos (Broken Down

Tässä on ', miltä todellista havaitsemistapaa näyttää. fastpath politiikka (kaikki detektorit rinnakkain). tuotannossaM SK2 useimmat pyynnöt poistuvat varhaisessa vaiheessa vain sen jälkeen, kun detekaattorit ovat samaa mieltä

Lyhyesti sanottuna

{
  "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-detektorit toimivat 51ms:ssa - ettäM SK1 rinnakkainen täytäntöönpano monista todistelähteistä

Detector-osuudet

Jokaisella tunnistuslaitteella on painotettu vaikutus. kielteinen = inhimillinen signaaliM SK2 positiivinen = bot-signaali

Detektori SSK1 Vaikutus Paine S Painettu M Syy V
UserAgent
Luettelo
Elintavat
Heuristinen -0.77 2.0 -1.54 88% ihmisen todennäköisyys
ClientSide -palvelu -0.05
VersionAge -0.05 ≥ \0.8 -0.04 Ohjelmia koskevat versiot näkyvät nykyisessä versiossa
Johdonmukaisuus Ei otsikkoa/UA-johdonmukaisuuksia M SK8
IP Localhost (neutral devissä

Euroopan unionin Heuristinen detektaattori täällä hallitsee - seM SK1 painotetaan 2x ja käytetään 16 ominaispiirteitä saavuttaakseen M88% inhimillisen luottamuksen

Saamiaan signaaleja

Jokainen detektaattori antaa signaaleja, jotka syötetään heuristimalliin:

{
  "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
}

Nämä signaalit pysyvät ja kouluttavat oppimisjärjestelmää ajan mittaan.

Luokat jakautuvat

Lopullisen päätöksen tulostaulukko kategorioiden mukaan:

Luokitus Tulos Paino SSK3 Huomautukset S
Heuristinen SSK2 | 2.0 voimakkain inhimillinen signaali
UserAgent -0.20 3 4 5 Normal browser
Otsake -0.15 | 4 5 Kaikki odotetut otsakkeet ovat esillä
Elintarvikkeiden laatua koskevat säännökset
ClientSide
Versionikä -0.04 3 4 5 Nykyinen hakukoneversio
epäjohdonmukaisuus -0.04 3 4 5 Yhdistyneiden Kansakuntien ottelujen otsikot
IP

Kokonainen painotettu tulos: M SK1 → Vahva inhimillinen signaali

Huomautus: Tämä on demo, ' fastpath politiikka, joka toimii kaikki näkyvyyden tunnistuslaitteet. Todellisessa tuotannossa, jossa varhaiset poistumisajat ovat aktivoidut 10ms. 51ms täällä johtuu siitä, että demo-modus estää varhaisen päätymisen osoittaakseen kaikki panokset

Täydennetty putki (Demo-modus LLM:n kanssa

Vertailun vuoksi, täälläM SK1 on demo politiikka - koko kaasuputki mukaan lukien LLM:n perustelutM SK1 Tämä osoittaa, mitä tapahtuu, kun detektorit hylkääminen:

{
  "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 detektorit 1.4 sekunnissa - LLM käynnisti ja erimielinen heuristiikkaan.

Detektori SSK1 Vaikutus Paine S Painettu M Syy V
LLM +0.85 2.5 +2.13
Heuristisen myöhään -0.77 ♫ ♫
Heuristinen ( varhaisessa vaiheessaM SK1 -0.77 2.0
UserAgent
Luettelo
Elintavat
ClientSide -palvelu Ei sormenjälkiä ( odottaa JS
VersionAge -0.05
Johdonmukaisuus Ei otsikkoa/UA-johdonmukaisuuksia M SK8
IP 0.00 ≥ ≤0.5 0.00 M Yhtenäislähettiläs

Tämä on mielenkiintoinen tapaus - LLM merkitsi sen mahdolliseksi botiksi kun kaikki statiset detektaattorit sanoivat ihmisen

{
  "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:n näkökanta tallennetaan opetusjärjestelmään palaavaksi signaaliksi.

Tiedonanto:

  1. Heuristinen رنjä kahdesti Molemmat ovat todenneet:

  2. LLM ei ole samaa mieltä - se havaitsi muodot, joita statiset detektaattorit ovat jättäneet huomiotta

  3. Ei sormenjälkiä ClientSide palautti 0, koska JS ei ollut vielä toteuttanut ':tä.

  4. Lopullinen tuomio: salli - jopa LLM:n epäilyksenä, ' , yhdistetyt todisteet suosivat edelleen inhimillisiä botType: "Scraper" lippu merkitsee, että sitä tarkkaillaan

Luokkien jakautuminen osoittaa jännitteen:

Luokitus Tulos Paino SSK3 Huomautukset S
Heuristinen Vahva inhimillinen signaali
AI LLM:n mukaan roboti
UserAgent -0.20
Otsake -0.15 3 4 5 Kaikki esitetyt otsakkeet
Elintarvikkeiden laatua koskevat säännökset
ClientSide
Versionikä -0.04 3 4 5 Nykyiset versiot
epäjohdonmukaisuus -0.04 3 4 5 Yhdistyneiden Kansakuntien ottelujen otsikot
IP

Kokonainen painotettu tulos: M SK1 → Ihmiset voittajatM SK1, mutta LLM-puolueen vastalause on havaittavissa .

Keskeinen näkemys: Järjestelmä ei luota sokein minkään ainoaan detektaattoriin. Kun he eivät ole samaa mieltä, todisteita painotetaan ja enemmistö voittaa, mutta vähemmistön mielipiteet kirjataan oppimiseen.

Tärkeää: Tämä verbose-toteamus on demo-onlyM SK1 Tuotteessa, saamme pienen vastauksen HTTP:n otsikoilla |(X-Bot-Confidence, X-Bot-RiskBand, jne. context.IsBot() tarkistaa. Täsmällinen JSON on parannuskeinon ja mukauttamisen kannalta M SK1 ettekä koskaan lähetä tätä asiakkaille.


Tulosten käyttö

if (context.IsBot())
    return Results.StatusCode(403);

var score = context.GetBotConfidence();  // 0.0–1.0
var risk  = context.GetRiskBand();       // Low/Elevated/Medium/High

Lopullisten kohtien suojelu

app.MapGet("/api/data", Secret).BlockBots();
app.MapGet("/sitemap.xml", Sitemap)
   .BlockBots(allowVerifiedBots: true);

Toimintaa ohjaavat riskitasot:

Riski Luottamus
alhainen SSK1 < \0.3 \ sallitaan \SSK5
Korkeutettu
Keskipitkän aikavälin
Korkean >

AI-tutkimukset ( VaihtoehtoinenM SK1

Ei vaadita -, mutta se on hyödyllinen kehittyneen automaattisen pyynnin kannalta

Heuristinen tunnistaja (NopeutettuM SK1 Oppiminen )

Järjestelmään sisältyy heuristinen tunnistaja, joka käyttää logistista regressiaa dynaamisesti opittujen painojen avulla.. Järjestelmä alkaa järkeisistä standardeista ja kehittyy havainnollisen palautteen perusteella.

Typinen latenssi: 1–5ms

{
  "BotDetection": {
    "AiDetection": {
      "Heuristic": {
        "Enabled": true,
        "LoadLearnedWeights": true,
        "EnableWeightLearning": true
      }
    }
  }
}

Merkintöjä ekstrahoidaan dynaamisesti - uusia malleja otetaan automaattisesti entiseen painoun ja opitaan ajan mittaanM SK1 Järjestelmä paljastaa, mistä on kysymys teidän liikenne.

Ollama LLM (

":n, ":n ja .:n kaltaiset vetäytyvät koneet Ollama paikallisen LLM:n johtopäätökselle.

ollama pull gemma3:1b
{
  "BotDetection": {
    "AiDetection": {
      "Provider": "Ollama",
      "Ollama": { "Model": "gemma3:1b" }
    }
  }
}

AI on fail-safe - jos se


Opetusjärjestelmä: Adaptiivinen, Ei liikkeelle panevaM SK2Hyvä

Statiset blocklistit jäävät vaihtumattomaksi. Atakaajat mukautuvatM SK1 Näin ollen tämä järjestelmä oppii

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

Muodot heikkenevät ajan myötä:

  • IP-osoitteet siirretään uudelleen
  • Määrätyt skriptit korjataan
  • Liikenne muuttuu luonnollisesti

Ilman tuhkautumista pystytte blockoimaan lailliset käyttäjät ikuisesti’

{
  "BotDetection": {
    "Learning": {
      "Enabled": true,
      "ScoreDecayTauHours": 168,
      "GcEligibleDays": 90
    }
  }
}

YARP Gateway: Edge Protection – sovelluksen suoja

"’:lla on myös Docker-first YARP reverse proxy , joka suorittaa havaitsemisen ennen pyyntöjä olette saanut appilta.

flowchart LR
    I[Internet] --> G[YARP Gateway]
    G -->|Human| App[Your App]
    G -->|Search Engine Bot| App
    G -->|Malicious| Block[403]

Käyttäkää se yhdessä rivissä:

docker run -p 80:8080 \
  -e DEFAULT_UPSTREAM=http://your-app:3000 \
  scottgal/mostlylucid.yarpgateway

Työt:

  • Linux
  • MacOS
  • Windows-järjestelmä
  • ARM (kyllä , Raspberry PiM SK2

Omien sääntöjen mukaista siirtoa varten:

services:
  gateway:
    image: scottgal/mostlylucid.yarpgateway
    volumes:
      - ./yarp.json:/app/config/yarp.json

Perusteltu tuotantovalmius

{
  "BotDetection": {
    "BotThreshold": 0.7,
    "BlockDetectedBots": true,
    "EnableAiDetection": true,
    "Learning": { "Enabled": true },
    "PathPolicies": {
      "/api/login": "strict",
      "/sitemap.xml": "allowVerifiedBots"
    }
  }
}

Mihin tämä menee

Tämä on osia 1 (katsauksenM SK2 Seuraavat osat kaivataan syvemmälle:

Tuleva toimintasuunnitelma:

  • RAG-perustainen malli, joka sopii vektoriembeddingeihin
  • Paikallinen pieni mallin johtopäätös via LlamaSharp / ONNX
  • Semantinen samankaltaisuus uusien hyökkäysmallien havaitsemiseksi

Jos haluatte robot-detektorin, voitte ymmärretään, laajentaa, ja lentää minne tahansa, tämä sarja on teilleM SK1


Linkki

Ilman lupaa – julkinen domain. Käyttäkää sitä niin kuin haluatte

Finding related posts...
logo

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