# StyloBot Release Series: Behavior, Non identité

*Identité-détection basée sur le bot M SK1IPs,utilisateurMSC3agents ,en-têtes+)effondre le moment où l'automatisation commence à roter les identités=. StyloBot modele des clients en tant que formes comportementales dans un espace vectoriel dimensionnel 130+*

[<img src="/articleimages/stylobot-logo.svg" alt="StyloBot" width="120" />](https://www.stylobot.net)

> **StyloBot Release Series**
> 
> 1. **Comportement, Non identité**: pourquoi StyloBot modele les clients de façon comportementale
> 2. [**Behaviour-Aware ASP.NET UI**](/blog/behaviour-aware-ux): le serveur - remet la surface sur ce résultat de détection
> 3. [**Trouver et rétablir une croissance sans limites dans les services longs-Running .NET**](/blog/stylobot-release-reliability): la discipline de fiabilité qui maintient le moteur borne dans la production
> 4. [**Behaviour-Aware TypeScript UI**](/blog/typescript-sdk): ExpressM SK1 Fastify, et composants de navigateur
> 5. [**L'architecture de la Sidecar**](/blog/sidecar-architecture): comment le moteur de détection se connecte aux piles NET non -.
> 6. [**Apprentissage pour devenir plus rapide**](/blog/stylobot-release-learning): le système d'apprentissage adaptatif , quatre- mémoire de niveauM SK3 et cache des verdicts
> 7. [**Étudier ce qui ne va pas se tenir**](/blog/stylobot-release-nondeterministic-testing): la discipline de vérification : un fichier BDF conduit à la régressionM SK2 charge, et à l'étalonnage
> 8. [**StyloExtract - un convertisseur HTML d'apprentissage local à Markdown**](/blog/stylobot-release-styloextract): la couche de marquage HTML→ qui se joigne au détecteur , le bug lucidVIEW du fauteuil roulant qui a capté l’image

# Introduction

> *"Oh, qu’un web tangled que nous tirons , quand nous faisons l’exercice de tromper pour la première fois*
> 
> Walter Scott

StyloBot détecte le coût d’entretien de la tromperie.

Le trafic innocent n’a pas à inventer des histoires, ,, à faire des sentiers ou à produire des preuves exculpatoires.

Il y a des années, j’ai travaillé en psychologie légale, classifier les patrons comportementaux pour identifier les pathologies sous-jacentes à la démence : patrons spécifiques de perte de mémoire MSC2 comorbidités caractéristiques , les compensations que les gens construisent inconscientement autour du fossé M SK4 La classification vous permet d’adapter un plan de soins à ce qui s’est réellement produit MST5 non au sujet de l’histoire de couverture Mst6 Le StyloBot applique la même technique à un nouvel ennemi M st7 AI Mstr8 automatisation dirigée volant vos données M str9 distorsion de votre prix M t10 épuisement de votre inventaire Mt11

La plupart des systèmes robotiques sont encore construits autour de revendications d’identité.

Cela fonctionne jusqu’à ce que les robots soient bons.

Le moment où l’automatisation commence à faire tourner les identités, imitant des navigateurs , s’étendant sur les IP résidentiels M SK2 et s’adaptant dans la session- , M SK5 qui revendique cette demande de êtreMSC6 cette d’être la bonne questionMST7 La question plus utile estMSP8 ♫MST9 comment se comporte ce client au fil du temps MST10 par rapport aux dizaines de témoins MTS11 comparativement aux clients que nous connaissons déjàMTS12

C’est l’idée qui sous-tend StyloBot. Il demande des modèles, séances , et répète les clients en tant que formes comportementales plutôt qu’identités statiquesM SK3 Il ressemble aux sessions ACROSS à douzaines de comportementaux dit et calcule quel type de client pourrait vraisemblablement produire ce comportementMSC4 Non stupid UA Mska5 blocage IPM Ska6 Ce post est la première entrée dans la série de sortie et explique ce modèleM ska7 pourquoi il existeMSKA8 pourquoi cela importeMske9 et pourquoi le comportement est une meilleure base que l’identité lorsque les bots sont intelligentsMsek10

Ce n’est pas't theoretical. Le moteur est en train de fonctionner sur cette page à l’heure actuelle . Votre radar se trouve à gaucheM SK3 le panneau Top Bots est les formes déjà enregistrées contre le stylobot

![Détection en direct sur cette page (Human, 4% probabilité d'un botM SK3 PermettreMSC4 à côté du panneau des Bots les plus haut de la liste MJMska5botMská6 SERankingBacklinksBotMské7 AranetMských8SearchBotPské9 bingbot et d'autres avec leur bot Bingbot10 confianceMške11 menaceMske12 et nombre de visites récentes](stylobot-live-detection.png?width=1100&format=webp&quality=70)

<!--category-- Caddy, TypeScript, ASP.NET, Bot Detection, Security, Architecture -->
<datetime class="hidden">2026-06-01T10:30</datetime>

# Démarrage rapide

StyloBot est ENTIREMENT FREE TO RUN. Dans l’avenir I'll sell realtime management and reporting M SK2to try and you know ...eatMSC4 but the engine in the exe IS StylobotMNK5 Commercial just adds distributed topologyMRK6 *en temps réel* Configuration (pas de rechargementM SK1 et plus d'options DB.

Toute la source est ici https://github.com /scottgalM SK3stylobot

Pour l'installer:
**macOS (Homebrew)**

```bash
brew install scottgal/stylobot/stylobot
stylobot 5080 http://localhost:3000
```

**Linux (apt - DebianM SK2Ubuntu)**

```bash
curl -1sLf 'https://dl.cloudsmith.io/public/mostlylucid/stylobot/setup.deb.sh' | sudo bash
sudo apt update && sudo apt install stylobot
stylobot 5080 http://localhost:3000
```

**Linux (manual / ARM64)**

```bash
# Download from GitHub Releases: stylobot-linux-x64.tar.gz or stylobot-linux-arm64.tar.gz
tar xzf stylobot-linux-x64.tar.gz && chmod +x stylobot && sudo mv stylobot /usr/local/bin/
stylobot 5080 http://localhost:3000
```

**Docker**

```bash
docker run --rm -p 8080:8080 -e DEFAULT_UPSTREAM=http://host.docker.internal:3000 \
  scottgal/stylobot-gateway:latest
```

**NuGet (embed as ASP.NET Core middlewareM SK2**

```bash
dotnet add package mostlylucid.botdetection
dotnet add package mostlylucid.botdetection.ui
```

```csharp
builder.Services.AddStyloBot(dashboard => {
    dashboard.AllowUnauthenticatedAccess = true; // dev only
});

app.UseRouting();
app.UseStyloBot();   // broadcast, detection, dashboard: correct ordering guaranteed
app.MapControllers();
```

Tableau de bord à `/_stylobot`. Détection à `~150µs` par demande de la première demande.

![StyloBot débarque sur une installation en direct: trafic au fil du temps, activité en direct par signatureM SK2 et le verdict de visiteur pour l’humain qui regarde la page](stylobot-dashboard-landing.png?width=1100&format=webp&quality=70)

---


Ensuite, il suffit de le faire. `stylobot 5080 http://localhost:3000` et voila votre site en amont est *écouter* (utiliser le blocage de mode -- pour bloquer effectivement aussi

Ce post est la première entrée dans la série de sorties actuelle du StyloBot. Il explique le modèle comportementalM SK1 Le prochain post, [Behaviour-Aware ASP.NET UI](/blog/behaviour-aware-ux), montre comment ce modèle devient une logique d'application à l'intérieur des vues et des contrôleurs Razor.

[TOC]

# La menace: une échelonnage , non une population

Avant de voir ce que les défenseurs ont, regardez ce qu’ils défendent contre.

<!-- IMAGE PLACEHOLDER: Bot sophistication ladder visualisation, 5 rungs from "curl scripts" up to "LLM-directed adaptive". Source: AI-generated diagram (cleanest if you ask for "5 stylised silhouettes ascending steps, each more humanoid, sci-fi engineering blueprint style"). -->
![Ladder de perfectionnement des bottes](img-placeholder-bot-ladder.png?width=900&format=webp&quality=40)

---


### 1. Stupid / Bots bruyants

(curlM SK1scanners , force brute, voies non validesMSC4

* **Défaut2Ban:** Il s'agit d'un système qui fonctionne bien.
* **TÉU, TPAC, TPMD, TM, TMÉU** Il s'agit d'un système qui fonctionne bien.
* **Gestion des bottes:** trivial
* **Limitation du taux:** Il s'agit d'un système qui fonctionne bien.

**Point de défaillance:** none, tout capture ces

Les scripts qui existent depuis l’avènement du web (perl FTWM SK1 ' aller sur le site, détruire les contenusMSC4 ÉVALUATION EASY pour identifierMST5 un seul point finalMst6 même IPMSt7 même UAM st8

---


### 2. Bots scriptés de base

(rotation de l'UAM SK1 points finals valides , écrapage simple)

* **Défaut2Ban:** commence à échouer
* **TÉU, TPAC, TPMD, TM, TMÉU** Il s’agit d’une approche qui est encore efficace
* **Gestion des bottes:** efficacité
* **Limitation du taux:** dépend de l'ajustement

**Point de défaillance:** systèmes fondés sur des erreurs évidentes.

Plus difficile. Vous devez maintenant identifier les patrons connus et traiter le trafic ultérieurement.

---


### 3. Bots de navigateur sans tête

(Puppeteer /Playwright, Exécution de la JSM SK3 Flux réelsMSC4

* **Défaut2Ban:** inefficace
* **TÉU, TPAC, TPMD, TM, TMÉU** Limitée
* **Gestion des bottes:** couche primaire
* **Limitation du taux:** affaibissement

**Point de défaillance:** tout fondé sur la correction de la demande ou les signatures.

Facile uniquement parce qu’ils' sont souvent utilisés légitimement (scrapingM SK2 SEO , etcMSC4 c’est fauxMNK5 ville positiveMRK6 Diser legit à l’illegitime est HARDMMK7

---


### 4. Bots clandestins

(rotation approximativeM SK1 IP résidentiels, imitation des empreintes digitales )

* **Défaut2Ban:** inefficace
* **TÉU, TPAC, TPMD, TM, TMÉU** de l’inefficacité dans une large mesure
* **Gestion des bottes:** Il commence à se battre.
* **Limitation du taux:** inefficace s'il est distribué

**Point de défaillance:**

* Réputation de la propriété intellectuelle
* enregistrement des empreintes digitales statiques
* seuil-contrôles basés sur

C’est là où les faux positifs grimpent. Faire plus forte pression et vos identifiants normaux tombent de l’eauM SK1 *Vous devez identifier le même client par une identité trompeuse.*.

---


### 5. Bots dirigés adaptés / LLM-

(slowM SK1distributed,apprentissage du comportement sur le site ,ajuster dynamiquementMSC4

* **Défaut2Ban:** non pertinents
* **TÉU, TPAC, TPMD, TM, TMÉU** inefficace
* **Gestion des bottes:** Incohérence
* **Limitation du taux:** inefficace

**Point de défaillance:**

* tout ce qui suppose la répétibilité
* Tout ce qui suppose des patrons connus
* tout ce qui suppose un comportement "botM SK1comme celui de "

Ces robots se comportent "correctlyM SK1 et évoluent. Les LLM s’adaptent aux essais de blocage standard (CAPTCHA solversMST4 randomizersMst5

C'est là où StyloBot est destiné. Maintenant, ces bots sont coûteux à exploiter à grande échelleM SK1 C'EST CHANGING .

---


Nous ' nous sommes déployés dans le temps et au-dessus de ladder ;, passant d’une simple identité **Pour se défendre contre les écravers intelligents au niveau 5, vous avez besoin de détection ET de protection INTELLIGENT.**

# Les Defenders: le marché actuel

En gardant à l’esprit ladder, ici's les défenseurs du kit apportentM SK2 Notez comment chaque option est réglée pour quelque part entre le niveau 1 et le niveau

<!-- IMAGE PLACEHOLDER: Heatmap, rows = the 9 market categories below, columns = bot levels 1-5, cells coloured green→red as effectiveness drops. Source: hand-drawn in something like Excalidraw / Figma; this should be a YOU diagram, not AI, since the calls are subjective. -->
![Efficacité du défenseur contre le niveau de la bot](img-placeholder-defender-heatmap.png?width=900&format=webp&quality=40)

---


### 1. DéfautM SK1Ban / log-interdiction fondée

* **Mode:** Post (reactiveM SK1
* **Durée de service:** secondes → minutes
* **Coût:** très faible (free + temps d’opsM SK2
* **Complexité:** faible

> Cheap, simpleM SK1 mais toujours après le fait

---


### 2. WAF (Cloudflare WAF, AWS WAF≥, Azure WAF≤)

* **Mode:** Activité (inlineM SK1
* **Durée de service:** ~1–10 ms
* **Coût:** faible → moyen MSC1règles MSC2 volume de demandes MSc3
* **Complexité:** faible → moyen (ajustement réglementaireM SK2

> Fast and cheap-ish, but only for known patterns

---


### 3. Gestion des bots Bot Cloudflare Mgmt, DataDomeM SK3 HUMANMSC4 AkamaiMST5 CHEQMst6

* **Mode:** Activité (inline + défis
* **Durée de service:** ~5–50 ms
* **Coût:** moyenne → élevée (fréquemment roulementM SK2basée ou liée)
* **Complexité:** moyenne → élevée (ajustement, faux positifsM SK3 impact UXMSC4

> Powerful but expensive, and can affect user experience

---


### 4. Limitation du taux / Contrôles de la passerelle API

* **Mode:** Activité (inlineM SK1
* **Durée de service:** ~1–5 ms
* **Coût:** faible → moyen ( habituellement assorti d'un ensemble mais étalonné avec l'utilisationM SK2
* **Complexité:** moyenne (parM SK1ajustement de point final)

> Contrôle abordable, mais instrument étonnant

---


### 5. Protection contre le DDoS Cloudflare, AkamaiM SK3 FastlyMSC4 Shield d'AWSMST5

* **Mode:** Active (edgeM SK1network)
* **Durée de service:** ~1–5 ms
* **Coût:** moyenne → très élevée (surtout à l'échelle /niveaux d'entreprisesMSC3
* **Complexité:** moyenne ( gérée le plus souventM SK1

> La couche infra essentielle, mais non comportementale

---


### 6. Fraude / Évaluation des risques  SiftM SK3 Forter, RisquéeMSC5 Radar à bandesMST6

* **Mode:** Mélangé (inline + postM SK2
* **Durée de service:** ~50–300 ms en ligne
* **Coût:** élevée (par transaction / % des recettes MSC3 Prix du SCS SMC4
* **Complexité:** haut (intégration + réglage + ops)

> Perspectives approfondies, mais lentes et coûteusesM SK1 utilisées de façon prudente

---


### 7. Échantillonnage des empreintes digitales de l'appareil Décision digitaleJSM SK2 ThreatMetrix, iovationMSC4

* **Mode:** Activité (client + en ligneM SK2
* **Durée de service:** ~10–100 ms
* **Coût:** moyenne → élevée (sur demandeM SK2prix de session)
* **Complexité:** haut (privéetéM SK1évasion ,intégration)

> Identité-heavy, est accompagné d’un bagage conforme et coûteux

---


### 8. SIEM / Observabilité MSC2SplunkMSC3 DatadogM SK4 Elastic, SentinelMST6

* **Mode:** Postes
* **Durée de service:** secondes → minutes
* **Coût:** très élevée (l'ingestion de données est le déclencheur
* **Complexité:** très élevée (questionsM SK1avertissements ,entretien)

> Layer de visibilité...prix mais nécessaire

---


### 9. colle personnalisée / logique des bords / lambdas

* **Mode:** Mélangé
* **Durée de service:** Les données relatives à l’échantillonnage ont été recueillies dans le cadre d’une enquête menée par la Division de l’évaluation environnementale.
* **Coût:** Hidé mais réel (dev temps + infraM SK2
* **Complexité:** le plus élevé au fil du temps

> La couche " nous avons dû corriger les lacunes "

---


# Le grand problème

Voir cette liste par rapport à ladder. Chacune des catégories a besoin d’UA M SK1 IP pour rester identifiable, ou de configuration manuelle par point final pour éviter le blocage ' légitimeMNK4 traficMMK5 EllesMSC6 sont lentesMRK7 si chaque demande passe par ce pipeline quiMST8 représente une partie importante du temps que vous consacrez à traiter les demandes au lieu de répondre à celles-ci MST9 Et peu importe combien vous dépensezM ST10 passé un certain point que vous avez gagnéM st11 ne bloquent pas le niveauMst12 bots ET vousMSt13 passerez plus de temps qu’à économiserM St14

Le marché couvre la MOST des bases pour les bots aux niveaux 1–3. Il n’y a pas de réponse pour le niveau '

# Solution possible: Inférence comportementale

Dans les articles précédents, j’ai écrit sur mon [Inférence comportementale](/blog/behavioural-inference-systems-blog) systèmes. Il s’agit d’un CHEAT qui est devenu une caractéristique

Les seuls 'sensorsM SK1 sont maintenant faciles à bypasser. La seule constante des attaques de niveau 4-5 est *comment ils trompent*; capteurs rotatifsM SK1 IPs , UAs, timingsMNK4 endpointsSNK5 Toute unité de capteur peut être parpasséeMRK6 La combinaison des capteurs augmente la sensibilité MNK7 attire plus de bottesMMK8 mais dans les systèmes statiques, elle augmente également les faux positifs, car si un seul déclencheur est suffisant pour bloquer les défectuositésMGK10 tous les capteurs ajoutés sont une autre façon d’écraser les défaillances .

La conclusion comportementale fait trois choses: *Profil* -> *de caractériser* -> *Remarque*. Que' c'est-ce ; qu'il s'agisse de lucidRAG ou du StyloBotM SK4 Dans le Stylobot, ce qui se rappelle est un comportemental *Le vecteur*; que ' est ce qu’un client *comportement* devient. comportement de la note, NON identitéM SK2

Pour StyloBot, vous êtes une projection sur un espace vecteur dimensionnel 130+

# StyloBot

StyloBot est un moteur d’inférence comportementale appliqué au trafic Web. Il utilise un large espace vecteur pour caractériser les demandes de web et identifier l’automatisation par rapport aux humains.

Il est plus proche d’un système de fusion des capteurs qu’un moteur réglementaire. Les détecteurs ne prennent pas de décisions. Ils émettent *signals*. Les signaux sont le système . Les détecteurs ne sont que les producteurs M SK2

## Comment il diffère du marché

Les chefs de file du marché partagent l’une des deux formes, soit ;, soit ils se fondent sur des règles statiques simples (, mises à jour constamment, ,, comme les feeds OWASP, ou ils analysent le TONS du trafic réel et ont besoin d’un SaaS pour vivre dans ..

StyloBot vise le modèle de distribution de Fail2Ban (run an exeM SK2 point at upstream) with the power of the enterprise stacksMSC4 Il télécharge des listes d’agents d'utilisateursSSK5 CVEsMska6 exploiteM Ska7 et autres indicateurs de compromis pour enrichir la détectionM ska8 mais ceux-ci sont un facteur dans une décisionMSKA9 jamais le verdict sur leur propre compteMske10

Sous le cap StyloBot fonctionne ~49 'contributors'; petits bits de code concentrés qui ressemblent à ce

```csharp
using Microsoft.AspNetCore.Http;
using Mostlylucid.BotDetection.Models;

namespace Mostlylucid.BotDetection.Detectors;

/// <summary>
///     Execution stage for detectors. Detectors in the same stage run in parallel.
///     Higher stages wait for lower stages to complete.
/// </summary>

public enum DetectorStage
{
    /// <summary>
    ///     Raw signal extraction (UA, headers, IP, client-side).
    ///     No dependencies on other detectors.
    /// </summary>

    RawSignals = 0,

    /// <summary>
    ///     Behavioral analysis that may depend on raw signals.
    ///     Runs after Stage 0 completes.
    /// </summary>

    Behavioral = 1,

    /// <summary>
    ///     Meta-analysis layers (inconsistency detection, risk assessment).
    ///     Reads signals from stages 0 and 1.
    /// </summary>

    MetaAnalysis = 2,

    /// <summary>
    ///     AI/ML-based detection that can use all prior signals.
    ///     Runs last, can learn from all other signals.
    /// </summary>

    Intelligence = 3
}

/// <summary>
///     Interface for bot detection strategies
/// </summary>

public interface IDetector
{
    /// <summary>
    ///     Name of the detector
    /// </summary>

    string Name { get; }

    /// <summary>
    ///     Execution stage for this detector.
    ///     Detectors in the same stage run in parallel.
    ///     Higher stages wait for lower stages to complete.
    /// </summary>

    DetectorStage Stage => DetectorStage.RawSignals;

    /// <summary>
    ///     Analyze an HTTP request for bot characteristics.
    ///     Legacy method - prefer DetectAsync with DetectionContext.
    /// </summary>

    /// <param name="context">HTTP context</param>
    /// <param name="cancellationToken">Cancellation token</param>
    /// <returns>Detection result with confidence score and reasons</returns>
    Task<DetectorResult> DetectAsync(HttpContext context, CancellationToken cancellationToken = default);

    /// <summary>
    ///     Analyze an HTTP request for bot characteristics using shared context.
    ///     Detectors should read signals from prior stages and write their own signals.
    /// </summary>

    /// <param name="detectionContext">Shared detection context with signal bus</param>
    /// <returns>Detection result with confidence score and reasons</returns>
    Task<DetectorResult> DetectAsync(DetectionContext detectionContext)
    {
        // Default implementation for backward compatibility
        return DetectAsync(detectionContext.HttpContext, detectionContext.CancellationToken);
    }
}

/// <summary>
///     Result from an individual detector
/// </summary>

public class DetectorResult
{
    /// <summary>
    ///     Confidence score from this detector (0.0 to 1.0)
    /// </summary>

    public double Confidence { get; set; }

    /// <summary>
    ///     Reasons found by this detector
    /// </summary>

    public List<DetectionReason> Reasons { get; set; } = new();

    /// <summary>
    ///     Bot type if identified
    /// </summary>

    public BotType? BotType { get; set; }

    /// <summary>
    ///     Bot name if known
    /// </summary>

    public string? BotName { get; set; }
}
```

Chaque détecteur déclarait ce qu'il est, ce qui dépend de luiM SK1 et ce que celui-ci retourne.

> REMARQUE: C'est un concept de base. StyloBot est un système DE grande taille avec des concepts MINIMALSM SK2 l'ajout de détecteurs est SIMPLE .

L’ordre des étapes est la discipline.

Utilisant mon [mostlylucid. cadre éphémère](https://github.com/scottgal/mostlylucid.atoms) (de plus amples renseignements à ce sujet [Établissement d'une bibliothèque réutilisable d'exécution temporaire](/blog/ephemeral-execution-library) et [Signales éphémères - Transformation d'atomes en réseau de détection](/blog/ephemeral-signals)) les détecteurs émettent ce que j'appelle des signaux ', des chaînes minuscules comme `ua.score=0.75` qui agissent à la fois comme métadonnées pour la demande ET pour l’enregistrement / données diagnostiquesM SK1 Le code LLM ( et le système lui-même ) utilisent ces signaux pour identifier les efficiences

> Outre: Ephemeral donne également StyloBot LFU / slidingM SK2window processing ; il rejette les demandes humaines tout en conservant une fenêtre de sorte que si un *avenir* demande traverse un seuil de bot nous pouvons regarder à l’arrière et réélaborer les plus anciens pour des indices. Ce mécanisme mérite son propre poste ; pour le moment, juste savoir ce qui se passeM SK2 pourquoi la conservation ne coûte rien dans l’état stable.

## Les détecteurs 49 ne sont pas des décisions

StyloBot a des détecteurs 49 . Il fonctionne rarement plus de 5-7 par requête. Ils ne sont pas 't S49 des verdicts indépendantsM SK6 ilsMSC7re SSK8 des façons d’observer le même comportement sous-jacentMNK9 chacune contribuant à un modèle de comportement uniqueMRK10

Le 49 est la CAPABILITÉ ; il n’utilise que ce qu’il a besoin .

**Voie rapide (le cas courant).** 5-7 Super rapide (subM SK2milliseconde) détecteurs et empreintes digitales initiauxMSC4 À partir de cette empreinte digitale, il peut décider quel type d'objet vous êtes ET quelles sont vos prochaines demandes susceptibles d'être (contenuMST6voyage des ressourcesMst7 Puis il prédit la demande suivanteMSt8 compare avec ce qui arrive en faitM st9 et ne s'élargit que si la forme diffèreMstr10Mrt11μs fin à finMtr12 C'est ce que la grande majorité du trafic humain voit jamaisMt13

**Voie lente (le cas intéressant).** Crucially, **le chemin lent se déroule OUT du pipeline de la demande**. Votre utilisateur' sa réponse est sortie sur le verdict de la voie rapideM SK2la voie lente est un enrichissement pour ce qui se passe ultérieurement , il n'y a pas de latence à cette demandeMSC5

Il déclenche lorsque le chemin rapide est *ambiguë* (les signaux se contredisent l'un à l'autre, , la forme ne correspond pas à rien que nous avons vu, M SK2la confiance se situe dans une zone morte, ) ou lorsque la demande semble nouvelle, MSC6nouveau modèle d'attaque, MST7probe CVE fraîche, Mst8, un LLM, MSt9, un scraper piloté qui essaie quelque chose que nous n'avons pas encore, M st10, il n'a pas encore des empreintes digitales, M St11, lorsqu'il le fait, M ST12, le StyloBot ouvre la gouttelette, M SST13, tous les détecteurs sont en train de fonctionner, M SP15, Le stade du renseignement consulte un LML qui prend tout le ensemble de signaux et contribue à une autre dimension de résolution, MSP16, le patron, MS SP17, le parallèle avec les renseignements sur la menace, M SC18, le raisonnement au sujet de l'intention de la demande, M SD19, la détection des choses dont l'héuristique est incapable, MSD20, la forme n'est pas encore adaptée, M DS21

Vous avez deux options d’escalade:

* **Écalade en ligne** ( reste hors du thread de la demande; fonctionne dans l'arrière-plan mais écrit un verdict avant le *Suivant* demande du même client de terres). Bon pour les courts débits où vous voulez que le prochain clic soit déjà classé.
* **Écalade hors ligne** Le verdict apparaît quelques secondes plus tard, de - à - et le groupe est mis à jour.

Quoi qu’il en soit, la demande qui a déclenché l’escalade a déjà été répondue. Il n’y a pas de scénario dans lequel le chemin lent ajoute des millisecondes à une page d’un utilisateur

Il s’agit là d’une affaire, :, qui paie des microsecondes lorsque vous pouvez, MSC2, qui paye des millisecondes lorsqu’il faut, ,, qui ne paie jamais les deux et , et qui ne le paie pas sur l’utilisateur. *de l’intention* . La mécanique complète de cette boucle de rétroaction (drift-la réputation du modèle ajustée par rapport aux ancrages archétypiquesM SK7le cache des verdicts par -détermination des empreintes digitalesMNK9la SkipMSC10BiasMMK11MissMRK12Gate d’observation qui décide si le pipeline fonctionne ou nonMK13 sont couvertes par [Apprentissage pour devenir plus rapide](/blog/stylobot-release-learning).

L’ensemble complet des couches ( vous ne les voyez toutes que sur une demande lente de cheminement - qui a vraiment besoin d’un angle unique

| La couche | Détecteurs MSC2 Ce qu'il capture MSC3
|-------|-----------|-----------------|
| **Identité** | SignatureM SK1 Correlation de l'en-tête, Périodique | Rotation UAMSC4 facteurs d'identitéMST5 patrons temporels SST6
| **Protocole** | TLS (JAM SK2JA≥4), TCP/IP pMSC6fMNK7 HTTPMRK8 HTTP+/3, TransportsMST10 Absence de flux | empreintes digitales d’un navigateur spooféeMSKS12 incohérences du protocole S|
| **Le comportement** | Forme de la vapeurM SK1 Vector de session , comportement avancé, comportement en cacheMSC4 comportement sur les cookiesMsko5 débit d'eau des ressourcesMsco6 séquence du contenuMko7 patrons d'échéancierMso8 chaînes de marquageMsosco9 biens manquantsMoscosco10 pageMscosco11 divergence de séquences de chargementMsusco12
| **Contexte** | UserAgent, HeaderM SK2 AiScraper , HaxxorMST4 SecurityToolMSC5 VersionAge MST6 Bots connusMSP7 charges d'attaque de piratesMSS8 versions impossibles du navigateur |
| **Réseau** | IPM SK1 GeoChange, ResponseBehavior , MultiLayerCorrelationMSC4 CveProbe CSK5 IPs de centres de donnéesMska6 voyage impossibleMske7 Scannement du VCEMSKA8 croisementM Ska9 incohérences entre les couches Mska10
| **Intelligence** | Reputation rapide, Préjudice à la réputationM SK2 Échéancier de réputation , ClusterMska4 SimilaritéM Ska5 Tendance Mska6 Réputation historiqueMka7 Clustering de LeidenMSKA8 similitude avec l’HNSWMske9 cote des menaces mska10
| **Fraude de publicité** | ClickFraudMSC1 PiiQueryString | IAB SIVTM SK3 datacenter/VPNMska5headless on paid trafficMske6 referrer spoofingM Ska7 immediate bounce
| **AI** | HeuristeM SK1 HeuristeLate, LLM | 50- Modèle fonctionnel MSC5msMSC6 optionnel LLM pour les cas ambigus
| **Client** | ClientSideM SK1 Approbation des empreintes digitales , DéfisVérification M SK3 sondes de synchronisation de la fonction JS, détection sans têteMSC5 défis liés à l'élimination du poussière MSC6

<!-- IMAGE PLACEHOLDER: Fast-path / slow-path flow. CRITICAL: must show fast path returning a response in ~150µs while slow path forks OFF the request thread (dotted arrow into a separate "background / worker" lane) and eventually writes back to the cluster store. Two slow-path lanes: "inline (background, before next request)" and "offline (batched worker)". Source: Excalidraw / Mermaid swimlane diagram. Hand-made beats AI here; the routing logic is exact and the OFF-THREAD nature is the whole point. -->
![Voie rapide par rapport à la voie lente (la voie lente est hors du fil de demande)](img-placeholder-fast-slow-path.png?width=900&format=webp&quality=40)

# Que faire si le comportement du client est un vecteur?

Avec les détecteurs 49 et des centaines de signaux, nous avons un LOT de métadonnées sur chaque client. *position* dans un espace dimensionnel de 130+

Ce que le tableau de bord montre est un *projection* ([Wikipedia](https://en.wikipedia.org/wiki/Projection_(linear_algebra))) de cet espace vectoriel sous-jacent , s'est effondré sur sept axesMSC2 Réseau, LocaleM SK4 EntêtesMST5 OutilMSP6 TransportsMSV7 SéanceM SV8 QualitéM Sv9 Une image de l'empreinte digitale que les humains peuvent effectivement lireMSS12

![Signature humaine sur le stylobot](stylobot-human-signature.png?width=1100&format=webp&quality=70)

## Les bottes sont des formes

Vos robots ne sont pas seulement une foule de chiffres, ils ont des formes différentes de celles des humains.

Les humains sont bruyants, mais *Ã©tablir une structure cohérente*. Les bottes sont uniformes mais *la structure est erronée*.

Voici la même projection pour un robot déclaré enregistré contre ce site.

![MJ12 signature d'un robot sur un stylobot .net: M SK3 probabilité de l'utilisation d'une botMska4 Mska5 confianceMka6 taux de bonne politique du BotM Ska7limiteM ska8 rechercheMSKA9 forme radar rougeMske10 profil de risque très élevé](stylobot-bot-signature.png?width=1100&format=webp&quality=70)

Deux clients, les mêmes sept axes , deux formes différentes. La couleur du verdict change de vert à rougeMSC3 Le profil de risque passe d’un inconnu à très élevéM SK4 Les champs des empreintes digitales sous MST5TLSMSP6 le protocole HTTP MST7 l’indicateur sans têteMSR8 se nourrissent d’indicateurs non identifiablesM ST9 des valeurs propresM st10 Le verdict n’est pasM SP11 un seul détournement de signauxM S SP12 Il est MS SP13 la forme entièreM SS14

Ce qui est important, c’est que la projection ressemble à une personne ou à quelque chose qui se prétend être un individu.

Combinez cela avec le suivi de toutes les sessions (le système recueille ZERO PIIM SK1 Une seule session peut sembler totalement humaine (elle pourrait même *être* une enregistrement de l’un). Où qu’il en soit ... sensibilité à travers le temps, recherche des cadences automatiséesM SK3 même les empreintes digitales humaines qui sont utilisées comme robots plus tardMSC4 c’est là que la forme leur donne vraiment quelque chose

## Cluster de bottes (Leiden over the vectors)

Une fois que tout est en forme, les robots cessent de se cacher les uns des autres.

StyloBot fonctionne [Détection communautaire de Leiden](https://en.wikipedia.org/wiki/Leiden_algorithm) sur l’espace vecteur vivant. Ce truc est emprunté en gros de mon travail GraphRAG [GraphRAG: Pourquoi la recherche par vecteur se détériore au niveau du corpus](/blog/graphrag-knowledge-graphs-for-rag) et [GraphRAG Partie 2: Minimum viable](/blog/graphrag-minimum-viable-implementation) vous'vous avez déjà vu ce modèle exact . Là il construit *Communautés de sens* sur les tronçons de document pour que la demande puisse retirer une idée connectée entière au lieu d’extraits déconnectés. Celle-ci effectue le travail structuralement identique sur *d'ordre comportemental* vecteurs; communautés de clients qui se déplacent de la même façonM SK1 Le même algorithme, le même point de vue , un domaine différentMSC4 Une famille de robots est simplement une communauté dans le graphiqueMST5 un sujet GraphRAG a la même forme sur le texteMSSK6

Deux préoccupations méritent d’être soulignées si : **Est-ce que 't Leiden ralentit en raison de la croissance |VM SK2 et** Oui, c'est pourquoi l'entrée n'est pas M SK1toute demande jamais vue ." C'est le cache de signatures chaudes limité (capped par `SignatureCacheSize`, par défaut `LowMemory` prédéterminé) plus une couche centroïde compacte pour la queue longue . M SK2V| est configurable `M` . La discipline de bouillage qui fait que ce travail est couverte par [Trouver et rétablir une croissance sans limites dans les services longs-Running .NET](/blog/stylobot-release-reliability). **Est-ce que la cosine 't s'effondre à des dimensions de 130** Il se fait dans la forme naïve. StyloBot marche à côté de lui deux façons . La similitude HNSW est approximée par le design ( ajusté via `M` et `ef_construct`), et le moteur fonctionne en termes de *déplacement d'une ancre archétypique apprentée* plutôt que tous les paires de distances dans l’espace brut.

Les bottes qui partagent une origine (la même trousse d'outilsM SK1le même opérateur ,le same scraping campaign) débarquent dans le même quartier, même s'ils ont fait tourner les IPsMSC5les en-têtesMNK6les empreintes digitales et l'échéancierMRK7 Elles n'ont pas été coordonnées pour ressembler à celles de la 'la -elles apparaissent identiques à celle du ;elles sont identiques parce qu'elles sont les mêmes.

Ce qui donne à StyloBot deux superpuissances gratuitement:

* **Une nouvelle demande reçoit le verdict de son groupe.** Première-aucune fois-voir le bot d’un opérateur connu ? déjà à l’intérieur d’une communauté hostile lors de son arrivéeMSC3 Pas de chaleurM SK4à la hausseMST5 pas de période d’apprentissageM ST6 M st7Cette est l’entitéM S ST8régression familiale dans le cache des verdictsM SP9voir [Apprentissage pour devenir plus rapide](/blog/stylobot-release-learning) pour savoir comment une empreinte digitale rotative hérite de sa famille
* **Les nouveaux attaques créent leur propre groupement** Lorsque quelque chose vraiment nouveau apparaît, ce n’est pas le cas. *elle-même* est le signal. Le chemin lent se déroule , l’étape LLM l’étiquette, et à partir de là, l’ensemble du groupe est reconnu sur le chemin rapide

C'est aussi là où la recherche de similitude (HNSW sur les mêmes vecteurs) gagne sa mainlevéeM SK2 "me montre les choses qui se rapprochent le plus de cette requête à l'heure actuelle

(Idee d'interface future montréeM SK1 pas mise en œuvre à l'heure actuelle )

![Les communautés de Leiden sur les vecteurs comportementaux](leiden_communities.png?width=900&format=webp&quality=40)

## Implications ponctuelles

Notez ce que j’ai dit : 'T . Je n’ai pas dit 't M'une fois installée' ou m' lorsqu’elle a été configurée correctementM SK6 car c’est ce qui est le secret du StyloBot de ' de la ' et du ; il a un bon ensemble par défaut, mais *il apprend*.

À mesure qu'il effectue ses profils *votre trafic* et comprend *vos utilisateurs*. Il ne s’agit pas d’un problème de crédibilité ; il détermine quels sont les patrons de demande M SK2 les points finals , et quelle est l’aspect du temps pour votre humain par rapport au trafic automatisé.

Vous pouvez alors décider, ou laisser le système s’en prendre soin (établir un seuil pour les bots, par exemple 0.8 pour la plupart et МSK3 pour les points de fin sûrsM SK4 Les défauts que le navire est bonMNK5 les défauts qui apparaissent après quelques heures sur votre trafic sont meilleursMRK6

# Conclusion

StyloBot est maintenant en direct. Auto-détection de la bothÃ©e dÃ©tendue. Source Ã©tÃ© ouverteM SK3 49 DÃ©tecteurs\. Traitement des décisions Ã part entiÃ ̈reMSC6 PropriÃ©té ÂTM- Sensibilisation Ã . AI sans LLMs dans le parcours dâ€TMÃ©termination de l'infrastructure Â«.Â» Le moteur de détection Â», Â» le tableau de bord Â» , Â» les paquets NuGet Â» МSK12 Â» l’execution de la passerelle Â« ; Â» tout cela est expédiÃ© dès maintenant et gratuit pour fonctionner sur votre propre infra Â» [github.comM SK1scottgal/stylobot](https://github.com/scottgal/stylobot) ou `brew install scottgal/stylobot/stylobot` et le pointez sur votre amont.

Les contrôles commerciaux se trouvent au sommet: configuration en direct sans rechargementM SK1 tableau de bord central de la flottille , persistance, fournisseurs commercials de LLMMSC4 MST5mo par domaineMSSK6 \MST7essai d'un jourMSS8 pas de carte de créditM SS9 OuvrirM SSS10 les projets de source et de bienfaisance obtiennent une licence gratuiteSSS11 [Contactez-nous](https://www.stylobot.net/contact). Le moteur de base demeure libre , sur votre infra-région, pour toujoursM SK3

Suivant dans la série de sortie: [Behaviour-Aware ASP.NET UI](/blog/behaviour-aware-ux), qui prend la classification comportementale décrite ci-dessus et l’expose aux formulaires de RazorM SK1, , et à la politique du contrôleur. [Trouver et rétablir une croissance sans limites dans les services longs-Running .NET](/blog/stylobot-release-reliability) couvre le réaménagement de la fiabilité qui permet au moteur d’être installé sur un Pi pour toujours sans intervention de l’opérateur, avec la couche vectorique StyloBot comme exemple de travail.

Si vous voulez l'ancienne conduite technique- jusqu'à cette série de mise à jour, [Partie 1](/blog/botdetection-introduction), [Partie 2](/blog/botdetection-part2-signature-pipeline-and-stylobot-architecture), et [Partie 3](/blog/botdetection-part3-as-simple-as-possible) Les fondements de l’inférence comportementale vivent dans [Inférence comportementale](/blog/behavioural-inference-systems-blog), la plomberie du signal dans [Signales éphémères](/blog/ephemeral-signals), et la lignée de regroupement de Leiden / dans [GraphRAG](/blog/graphrag-knowledge-graphs-for-rag) et [GraphRAG Partie 2](/blog/graphrag-minimum-viable-implementation).