StyloBot Release Series: Behaviour-Aware ASPM SK2NET UI (Français (French))

StyloBot Release Series: Behaviour-Aware ASPM SK2NET UI

Monday, 01 June 2026

//

25 minute read

La détection des bottes ne doit pas se terminer par permettre/bloc. Ce post montre comment le résultat de la classification du StyloBot ' devient une logique d’application dans ASPMSC3NETM SK4 les aides à l’étiquetage dans RazorMNK5 les filtres d’action et les politiques dans les contrôleurs MNK6 le signalMRK7 le gating de niveauMMK8 afin que votre UI puisse façonner l’expérience au lieu de freiner la friction après le fait

StyloBot

StyloBot Release Series

  1. Comportement, Non identité: pourquoi StyloBot modele les clients de façon comportementale
  2. Behaviour-Aware ASP.NET UI: 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: la discipline de fiabilité qui maintient le moteur borne dans la production
  4. Behaviour-Aware TypeScript UI: ExpressM SK1 Fastify, et composants de navigateur
  5. L'architecture de la Sidecar: comment le moteur de détection se connecte aux piles NET non -.
  6. Apprentissage pour devenir plus rapide: 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: 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: la couche de marquage HTML→ qui se joigne au détecteur , le bug lucidVIEW du fauteuil roulant qui a capté l’image

L'interface du StyloBot est la surface ASP.NET sur le Stylobot'le résultat de détectionM SK2 Son travail est simple : rendre disponible un bot et une classification des risques là où les applications Web en ont réellement besoin

Introduction

La plupart des systèmes UX sont aveugles.

Ce post est la deuxième entrée dans la série de sortie StyloBot. Comportement, Non identité couvre le modèle sous le système. Ce dernier couvre la surface ASP.NET qui transforme ce modèle en comportement d’applicationM SK2

Supposons que la détection existe déjà. Supporons que la demande courante a déjà un résultat de classification attaché à celle-ci

C'est ce que l'interface de StyloBot est pour. Il donne à ASP.NET une surface propre sur le résultat de détection afin que les vues RazorM SK2 les contrôleurs , et les gestionnaires de page puissent l'utiliser directement

Par conséquent, au lieu de freiner la friction après le fait, vous pouvez façonner l’expérience en temps de render:

  • montrer un contenu différent aux humains et aux robots
  • dissimuler l'interface UI de valeur élevée- des sessions suspectes
  • Ajouter des contraintes aux flux à risque avant qu'ils ne deviennent abusifs
  • conserver l'application dans les contrôleurs pendant que la page demeure contextuelle-aware

Cet article traite spécifiquement de ce qui suit : ASP.surface NET:aides à l'affichage des balises , pageM SK3répartition du niveauMST4 et serveurMSSK5intégration des côtésMSC6 Comportement, Non identité, qui explique le modèle comportemental sous-jacent à celui-ci . L'article suivant traite du JavaScript et du clientM SK2surface latérale.

La surface ASP.NET

C’est ainsi que le comportement apparaît dans l’interface aware du styleobot.

La barre supérieure du tableau de bord sur le stylobot.netM SK1 les chiffres globaux se trouvent à gauche , et à droite "YOUMSC4 Homme 0.0% Vue inconnue S→" composée d’un sbMST7badgeMSP8 sb~MST9confidenceMSST10 et d’une sb+MST11risqueMSS12aides aux balises des pilules

À droite, le groupe de main - est composé de trois aides à l’étiquetage (<sb-badge>, <sb-confidence>, <sb-risk-pill>) lecture à partir du même résultat par -détection de la demande le contrôleur ferait. Les mêmes donnéesM SK3 exprimées au moment de la traductionMSC4

L’idée de base est simple : la détection ne devrait pas se terminer à "allow" ou "blockM SK4 Dans une application Web, elle doit être disponible pour l’interface elle-même.

Cela signifie

  • Razor peut produire des contenus différents pour les humains, bots , et certains types de robot
  • Les formulaires peuvent inclure des dispositifs de défense stratifiés comme les récipients à miel en tant que partie de la page, et non pas comme un système de sécurité distinct
  • les contrôleurs peuvent appliquer le même résultat de détection que l'UI déjà utilisé
  • votre application ASP.NET peut réagir à ce que la demande fait, et non seulement à qui la session prétend être

Si vous voulez l’histoire du moteur de détection, qui est déjà couvert dans Partie 2 et Partie 3. Cet article commence une couche au-dessus de celle-ci: une fois que la détection est déjà sur place , comment l'exposer de façon propre à ASP

flowchart LR
    A[Incoming request] --> B[StyloBot middleware]
    B --> C[Risk score bot type and signals]
    C --> D[Tag helpers in Razor]
    C --> E[Controller and page policy]
    D --> F[Different rendered experience]
    E --> G[Allow block challenge or redirect]

Pourquoi cette surface est importante

Sans une surface d’interface, la détection demeure piquée dans l’infrastructure.

Vous pouvez enregistrer un score. Vous pouvez peut-être bloquer une demandeM SK1 Mais vous ne pouvez pas facilement dire:

  • montrer le catalogue mais cacher l'offre
  • Rendre le formulaire d’inscription différemment pour un trafic à risque élevé
  • laisser les bots de recherche voir crawl-métadonnées conviviales sans remettre chaque signal commercial
  • traiter les crawleurs d'AI comme une conversation de délivrance de licence plutôt qu'une présentation de formulaires défectueux

C'est pourquoi la surface est importante. Il transforme la détection en logique d'application.

Parfois, la bonne réponse est un bloc.

  • dissimuler les codes de rabais à l'intention des scrapers
  • supprimer le contrôle express des séances de risque élevées-
  • Fournir des métadonnées de recherche sans exposer les signaux commerciaux
  • renoncer silencieusement aux abonnements au bulletin d'information de l'automatisation
  • Ajouter des frictions aux connexions suspectes sans punir les utilisateurs normaux

C'est le différenciateur de l'interface de StyloBot. Le moteur de détection vous donne le verdict ; la surface ASP.NET vous permet d'y faire quelque chose utile au niveau de page et de fluxM SK3 MSC4 Là où ce verdict provient deMST5 comment il est cached MST6 Mst7 et pourquoi une exécution soutenue des demandes du même client coûte microsecondes plutôt que millisecondesMst8 est couvert par Apprentissage pour devenir plus rapide.)

Exemple de l'emplacement du magasin

Cet article passe par un échantillon ASP.NET Core MVC storefront qui utilise des aides à l'interface de StyloBot sur six pages.

L'application de l'échantillon est intentionnellement petite: produits générésM SK1 quelques catégories , sortie de commandes, bulletin d'informationMSC4 et loginMNK5 Le point n'est pas la logique commercialeMST6 Ce point montre comment le classement des robots devient une logique d'applicationMSP7

Installer les paquets:

dotnet add package Mostlylucid.BotDetection
dotnet add package Mostlylucid.BotDetection.UI

Ensuite, connectez le StyloBot à l'intérieur Program.cs:

builder.Services.AddStyloBot(
    configureDashboard: dashboard =>
    {
        dashboard.BasePath = "/_stylobot";
        dashboard.AllowUnauthenticatedAccess = true; // dev only
    },
    configureDetection: detection =>
    {
        detection.ExcludeLocalIpFromBroadcast = false;
    });

// ...

app.UseStyloBot();
app.MapHub<StyloBotDashboardHub>("/_stylobot/hub");

Cela suffit pour commencer à classer les demandes et à exposer le résultat aux contrôleurs Razor, , et au tableau de bord en direct. Si vous voulez l’histoire d’intégration minimaleM SK3 La partie 3 couvre ce point en détail..

Un exemple rapide: login comme défense stratifiée

La page d’inscription est un bon exemple micro, car elle montre le modèle dans quelques lignes.

flowchart TD
    A[Request for login page] --> B[Render page]
    B --> C[Bot sees warning]
    B --> D[Form is rendered]
    D --> E[Submission arrives]
    E --> F{Honeypot triggered?}
    F -->|Yes| G[Redirect to LoginDenied]
    F -->|No| H{IsBot?}
    H -->|Yes| G
    H -->|No| I[Authenticate user]
<!-- Layer 1: bots see a deterrent message before the form -->
<sb-bot>
    <div class="alert alert-warning">Automated login attempts are detected and blocked.</div>
</sb-bot>

<form method="post" action="/Account/Login">
    <!-- Layer 2: hidden trap fields - humans leave them blank; bots fill everything -->
    <sb-honeypot prefix="hp" fields="2"></sb-honeypot>

    <input type="email" name="email" />
    <input type="password" name="password" />
    <button type="submit">Sign In</button>
</form>
// Layer 3: server-side final check before any processing
if (HoneypotValidator.IsTriggered(HttpContext) || HttpContext.IsBot())
    return RedirectToAction("LoginDenied");

Le robot voit un avertissement, puis se déplace dans la poêle de miel s’il soumet, puis obtient le serveur rejeté - si il passe par les couches antérieures d’une manière ou d’autreMSC3 Chaque couche est petiteM SK4 Ensemble, ils créent une défense en profondeur sans CAPTCHAMST5première expérience pour tousMst6

Le reste de ce post élargit cette idée au-delà d’un magasin réaliste


Le coût de ne pas savoir qui est dans votre magasin

Le principal problème commercial n’est pas "bots" dans l’abstractM SK2 Il est que les différents types d’automatisation causent des dommages de différentes sortes.

Écraseurs de prix. Ils récoltent les noms de produits, prixM SK1 descriptions, et données sur les stocks afin que les concurrents puissent vous reproduire en temps réel.

Essais de chèques. Ils brutalisent les espaces de code à rabais jusqu’à ce qu’ils trouvent des codes valides, qui sont ensuite affichés sur les forums de coupons et érodent la marge.

Enregistreurs de crédibilité. Ils répètent les noms d’utilisateurs détournés-parmes de mots de passe à l’échelle. Même les taux de frappe faibles deviennent des événements de prise en compte lorsque le volume est élevéM SK2

Les crawleurs de formation AI. Ils récoltent des descriptions, examens , et une copie éditoriale pour la formation du modèle. Ce n’est pas le même modèle de menace que celui d’un attaquant à l’échelon du checkoutM SK3 mais il s’agit encore d’une extraction

Harvesters de bulletins. Ils étudient les formulaires d’inscription pour valider les adresses électroniques, listes de diffusion des poisons , ou pour vérifier les faiblesses liées à l’injection.

Il ne s’agit pas du même problème.


Page 1: The shop floor

La page d’accueil est là où commencent de nombreux écrappers. Ils veulent le catalogue. Vous voulez un catalogue utilisable pour les humains et indexable à la rechercheM SK2 mais moins utile sur le plan commercial pour l’élevage automatisé .

Scénario: un affaiblissement des prix frappe /; il voit un message de catalogue neutre , aucune copie de bienvenueM SK2 et aucun nombre de catégories.

<!-- Human visitors see the welcome message and category count -->
<sb-human>
    <p class="muted">Welcome! Browse @Model.Count products.</p>
</sb-human>

<!-- Bots see a neutral, non-committal message -->
<sb-bot fallback="hide">
    <p class="muted">Product catalogue.</p>
</sb-bot>

<!-- Search engine crawlers get structured metadata, not price data -->
<sb-gate bot-type="SearchEngine">
    <meta name="description" content="@Model.Count products across @categories categories." />
</sb-gate>

<!-- Verified bots (Googlebot etc.) see a specific indicator -->
<sb-gate bot-type="VerifiedBot">
    <div class="alert alert-info">Verified crawler detected. Serving crawl-optimised view.</div>
</sb-gate>

<!-- High-risk sessions see friction before the buy buttons -->
<sb-gate min-risk="High">
    <div class="alert alert-warning">Additional verification may be required at checkout.</div>
</sb-gate>

Il s’agit de donner des conseils, non de contrôles d’accèsM SK1 La page fonctionne toujours. Quel est le contexte qui entoure-t-elle? . Cela rend la page moins utile pour une récolte systématique sans dégrader l’expérience du clientMSC4

C'est aussi là où la différenciation des crawleurs est importante. Vous voulez bien les produits indexés par Googlebot. Vous ne voudrez peut-être pas que chaque client automatisé reçoive la même présentation commerciale qu'un acheteur humain.


Page 2: La page du produit

La page de détail du produit est là où l’intention commerciale devient explicite. C’est aussi là que les écrasiers des prix et les chasseurs aux bons cherchent les signaux dont ils s’intéressent.

Scénario: un écrasateur de prix atterre sur /Product/Detail/12; il ne voit pas de code d'actualisation , aucun ajout-àM SK3 bouton de cartoucheMST4 et aucun signal d'achat pour agir surMSC5

<!-- Exclusive discount - only shown to low-risk, verified human visitors -->
<sb-gate max-risk="Low">
    <div class="alert alert-success">
        Member discount: use code LOYAL10 for 10% off today.
    </div>
</sb-gate>

<!-- Medium-risk visitors get a friction signal before the cart button -->
<sb-gate min-risk="Medium">
    <div class="alert alert-warning">
        We noticed some unusual activity from your network.
        You can still purchase. You may be asked to verify at checkout.
    </div>
</sb-gate>

<!-- Datacenter/VPN visitors lose the buy button -->
<sb-signal signal="ip.is_datacenter" condition="true">
    <p class="muted">Purchase unavailable from datacenter or VPN networks.</p>
</sb-signal>

<!-- Human-only: the add-to-cart button -->
<sb-gate human-only>
    <form method="post" action="/Cart/Add">
        <button type="submit" class="btn btn-success">Add to Cart</button>
    </form>
</sb-gate>

<!-- Detection mini-card for transparency -->
<sb-summary variant="card"></sb-summary>
<sb-confidence display="bar" width="180px"></sb-confidence>

Trois modèles utiles apparaissent ici.

Ciblage de loyauté. De bonnes offres devraient aller à de bonnes sessions. En montrant des rabais seulement aux faiblesM SK1 le trafic risque réduit les déchets et réduit la probabilité que les scrapers ou les bots de coupons retirent l’offre.

Friction progressive. Moyenne-le risque ne signifie pas automatiquement M SK1bloc."Les réseaux partagésMSC3les navigateurs de protection des renseignements personnels , et les VPNs créent tous des fausses réponses positives. Une mise en garde préserve souvent la vente mieux que le refus forcéMNK6

Signale-gatage de niveauM SK1 ip.is_datacenter est un signal brut, pas une bande de risqueM SK1 Parfois, la politique à laquelle vous accordez attention n’est pas "de quelle façon le visiteur est-il risqué dans l’ensemble

Si vous voulez l'architecture derrière ces signaux, La partie 2 couvre le pipeline de détection par étapes.

Cette distinction s’applique au reste de l’échantillon.


Page 3: Dépôt

La vérification est la plus importante - cible de valeur sur le site . automatisation des fraudes

Scénario: un bon d'achatM SK1 coupures de bots testés /Cart/Checkout; il voit un message mortM SK1 message de fin , soumet une poêle d’herbe- formulaire rempliMSC4 et obtient une acceptation silencieuse sans incitatif à la renouvellement.

flowchart TD
    A[Visitor reaches checkout] --> B{Human?}
    B -->|No| C[Show dead-end message]
    B -->|Yes| D{Risk band}
    D -->|Low| E[Express checkout]
    D -->|Elevated| F[Standard payment flow]
    D -->|High or above| G[Alternative path]
    E --> H[POST order]
    F --> H
    G --> H
    H --> I{Honeypot triggered?}
    I -->|Yes| J[Silent accept fake success]
    I -->|No| K[Process real order]
<!-- Gate the entire checkout form on human-only detection -->
<sb-gate human-only>
    <form method="post" action="/Cart/Order">
        @Html.AntiForgeryToken()

        <!-- Honeypot trap fields - invisible to humans, irresistible to bots -->
        <sb-honeypot prefix="co" fields="2"></sb-honeypot>

        <!-- Express checkout only for trusted visitors -->
        <sb-gate max-risk="Low">
            <button type="submit" name="express" value="true" class="btn btn-success">
                Express Checkout
            </button>
        </sb-gate>

        <!-- Standard checkout available up to elevated risk -->
        <sb-gate max-risk="Elevated">
            <button type="submit" class="btn btn-primary">Proceed to Payment</button>
        </sb-gate>

        <!-- High-risk visitors get an alternative path -->
        <sb-gate min-risk="High">
            <p>Please call us to complete your order: 0800 123 456</p>
        </sb-gate>
    </form>
</sb-gate>

<!-- Bots see a dead end, not an error -->
<sb-bot>
    <p class="muted">Checkout is only available to human visitors.</p>
</sb-bot>

Et dans le contrôleur:

[HttpPost]
public IActionResult Order(OrderModel model)
{
    if (HoneypotValidator.IsTriggered(HttpContext))
    {
        // Silent accept - bot thinks the order succeeded
        return RedirectToAction("Confirmed");
    }

    return ProcessOrder(model);
}

Cette page montre trois techniques qui travaillent ensemble.

Rejet d'un récipient de miel. Si un bot remplit des champs cachés, vous acceptez silencieusement et rejettez la demande. le rétroaction d'erreur aide les attaquants à iterer ; le silence gaspille leur tempsM SK3

Risque1 L’expédition rapide est un avantage de confiance, non pas droit par défaut . Les séances suspectes peuvent encore être achetées, mais sur une voie plus lenteM SK3

Dégradation gracieuse. Un message simple est souvent plus efficace sur le plan opérationnel qu’un erreur difficile.


Page 4: Login

L’adhésion est un autre type de page à valeur élevée.

Scénario: un certificat de crédibilité - attaques d’un script /Account/Login; il ne voit jamais la forme , remplit le récipient de miel LoginDenied.

<!-- High-risk sessions see friction before the form -->
<sb-gate min-risk="High">
    <div class="alert alert-danger">
        High-risk signals detected. Login attempts are logged and may be blocked.
    </div>
</sb-gate>

<!-- Bots see a deterrent message - but the form is still rendered below -->
<sb-bot>
    <div class="alert alert-warning">
        Automated login attempts are detected and blocked.
    </div>
</sb-bot>

<!-- Form is visible to everyone; the honeypot is the second layer -->
<form method="post" action="/Account/Login">
    @Html.AntiForgeryToken()
    <sb-honeypot prefix="hp" fields="2"></sb-honeypot>
    <div class="form-group">
        <label for="email">Email address</label>
        <input type="email" id="email" name="email" autocomplete="email" />
    </div>
    <div class="form-group">
        <label for="password">Password</label>
        <input type="password" id="password" name="password" autocomplete="current-password" />
    </div>
    <button type="submit" class="btn btn-primary">Sign In</button>
</form>

Le contrôleur fournit le contrôle final:

[HttpPost]
public IActionResult Login(LoginModel model)
{
    if (HoneypotValidator.IsTriggered(HttpContext))
        return RedirectToAction("LoginDenied");

    if (HttpContext.IsBot())
        return RedirectToAction("LoginDenied");

    return Authenticate(model);
}

Le point clé est l’asymétrie des coûts. Un faux positif à la sortie peut perdre une vente . Un Faux positif au moment de l’enregistrement coûte habituellement un retry. Un certificat manquant de crédibilitéM SK3 le fait d’affecter un compte coûte une attaqueMSC4 Cela signifie que ce point final peut justifier une application plus rigoureuseMNK5


Page 5: Bulletin

L’inscription au bulletin est là où la manipulation du crawler AI devient particulièrement intéressante, parce que la bonne réponse n’est souvent pas M SK1block."

Scénario: GPTBot frappe /Newsletter/Subscribe; il voit un message de licence au lieu d’un pitch d’abonnement , et sa présentation de formulaire est discardée silencieusement

Les crawleurs AI ne cherchent pas à acheter des produits ou des comptes bruts.

<!-- Human pitch - only visible to real visitors -->
<sb-human>
    <p class="muted">
        Get exclusive deals and discount codes delivered to your inbox.
        Subscribe below. Unsubscribe any time.
    </p>
</sb-human>

<!-- AI crawlers get a licensing message, not a block -->
<sb-gate bot-type="AiBot">
    <div class="alert alert-info">
        This email subscription endpoint is for human readers.
        For data licensing enquiries please contact us directly.
    </div>
</sb-gate>

<!-- Other automated clients get a simpler message -->
<sb-bot>
    <sb-gate bot-type="AiBot" negate="true">
        <div class="alert alert-warning">
            Automated subscription attempts are discarded.
        </div>
    </sb-gate>
</sb-bot>

<!-- The form - visible to everyone, processed differently per visitor type -->
<div class="card">
    <form method="post" action="/Newsletter/Subscribe">
        @Html.AntiForgeryToken()
        <sb-honeypot prefix="nl" fields="3"></sb-honeypot>
        <div class="form-group">
            <label for="email">Your email address</label>
            <input type="email" id="email" name="email" autocomplete="email" />
        </div>
        <button type="submit" class="btn btn-success">Subscribe</button>
    </form>
</div>

Et dans le contrôleur:

[HttpPost]
public IActionResult Subscribe(string email)
{
    if (HoneypotValidator.IsTriggered(HttpContext) || HttpContext.IsBot())
    {
        // Silent accept: bot thinks it succeeded, no retry incentive
        return RedirectToAction("Thanks", new { real = false });
    }

    _mailingList.Subscribe(email);
    return RedirectToAction("Thanks", new { real = true });
}

L'article 5 de la Loi sur l'immigration et le statut des réfugiés Thanks la vue peut être identique dans les deux cas. La partie importante est que le client automatisé ne peut pas distinguer le succès d’un rejet silencieux.

C’est aussi là où le type de robot est le plus important. AiBot n’est pas seulement un autre étiquette hostile. Il s’agit d’une classification qui peut déclencher une réaction de l’entreprise :


Page 6: Ma détection

L'article 5 de la Loi sur l'immigration et le statut des réfugiés /Me page is the developer-facing utility pageM SK1 It answers the practical integration question: what does StyloBot think this request is?

Scénario: un développeur vient de mettre en place StyloBot et veut vérifier que les sessions du navigateur donnent des résultats humains. curl scores as bot.

<!-- Full detection panel: confidence, risk, reasons, contributing detectors -->
<bot-detection-details collapsed="false"></bot-detection-details>

<!-- Individual components for custom layouts -->
<sb-badge variant="full"></sb-badge>
<sb-confidence display="both" width="100%"></sb-confidence>
<sb-risk-pill></sb-risk-pill>
<sb-summary variant="card"></sb-summary>

Que <bot-detection-details> panel is what stylobot.net renders on its own home page. Same componentM SK2 same Razor tag , real recorded trafficMSC4

bot-détectionM SK1 panneau de détails rendu sur stylobot .net: Live MSC4 Votre détermination par radarMNK5 MNK6 probabilité d'un robotMMK7 Très faible risqueMRK8 Permettre la politiqueMBK9 trois détecteurs contribuantsMDK10 Haut panel Bots ci-dessous, liste des bottes réelles enregistrées

Et par le biais du HttpContext extension API:

ViewBag.IsBot       = HttpContext.IsBot();
ViewBag.IsHuman     = HttpContext.IsHuman();
ViewBag.Probability = HttpContext.GetBotProbability();
ViewBag.RiskBand    = HttpContext.GetRiskBand();
ViewBag.BotType     = HttpContext.GetBotType();
ViewBag.BotName     = HttpContext.GetBotName();
ViewBag.Reasons     = HttpContext.GetDetectionReasons().ToList();

Simulation de différentes classifications au cours du développement:

# Simulate a search engine crawler
curl -H "ml-bot-test-mode: googlebot" http://localhost:5200/Me

# Simulate a high-risk scraper
curl -H "ml-bot-test-mode: scraper" http://localhost:5200/Me

# Real browser (Playwright, Chrome, etc.) scores as human

Établissement EnableTestMode: true dans appsettings.Development.json si vous voulez que ces titres soient honorés.


Modèle d'aide à l'étiquette

StyloBot UI est petit à but. Les primitives sont simples ; les combinaisons sont là où la souplesse provient de.

Aideur à l'étiquetage Rôle MSC2 Attributes clés MSC3
<sb-human> Rendre uniquement pour les humains fallback ("montrerM SK1 dissimuler " lorsque non classé; par défautMST4 montrerMSS5 SSS6
<sb-bot> Rendre uniquement pour les bots fallback (defaultM SK1 dissimuler)
<sb-gate> Multi
<sb-signal> Porte de signalisation monoblocage signal, condition, value, fallback, negate
<sb-honeypot> Champs de piège invisibles prefix, fields (1-3; par défaut
<sb-badge> Équipe de détection de l'état variant ("fullM SK1compact"/"iconMSC3
<sb-confidence> Bar de probabilité des bottes display ("barMSC1texte"/"bothM SK3 width
<sb-risk-pill> Étiquette de bande à risque aucune MSC2
<sb-summary> Carte de détection compacte variant ("inlineM SK1card")
<bot-detection-details> Ventilation complète de la détection collapsed (boolM SK1 view ("defaultM SK1compact")

<sb-gate> est le chevaucheur général

<sb-gate human-only>...</sb-gate>
<sb-gate bot-only>...</sb-gate>
<sb-gate verified-only>...</sb-gate>
<sb-gate max-risk="Low">...</sb-gate>
<sb-gate min-risk="Medium">...</sb-gate>
<sb-gate bot-type="SearchEngine,VerifiedBot">...</sb-gate>
<sb-gate bot-type="AiBot" negate="true">...</sb-gate>
<sb-gate max-risk="Low" fallback="hide">...</sb-gate>

Bandes de risque en ordre: VeryLow, Low, Elevated, Medium, High, VeryHigh, Critical.

<sb-signal> les portes directement sur des signaux de panneau noir bruts. condition attribute accepte exists, not-exists, true, false, equals, not-equals, gt, lt, gte, lte, contains, any-true, et all-true.

<sb-signal signal="ip.is_datacenter" condition="true">...</sb-signal>
<sb-signal signal="detection.probability" condition="gte" value="0.8">...</sb-signal>

L'important choix en matière de conception est que ces aidants visent à rendre les enregistrements non bloqués. Ils permettent à votre application d'exprimer sa politique dans l'interface sans transformer chaque incertitude en refus.

Attributes du contrôleur et de la page Razor

Pour le serveur-exécution par la partie de l'interface, StyloBot expose également les filtres d'action et les attributs des pagesM SK2 Si la couche UI est "montrer quelque chose de différenteMSC4 cette couche est ♫" faire quelque chose d'autreMNK6

[BlockBots] retourne 403 pour le botM SK1requêtes classifiées , avec des listes d'autorisation facultatives.

[BlockBots]                                                         // block everything
[BlockBots(AllowSearchEngines = true)]                              // let Googlebot through
[BlockBots(AllowSearchEngines = true, AllowSocialMediaBots = true)] // SEO + social previews
[BlockBots(BlockCountries = "CN,RU", BlockVpn = true)]              // geo + network enforcement

Permettre les drapeaux: AllowVerifiedBots, AllowSearchEngines, AllowSocialMediaBots, AllowMonitoringBots, AllowAiBots, AllowGoodBots, AllowScrapers, AllowMaliciousBots, AllowTools.

Flags de réseau: BlockCountries, AllowCountries, BlockVpn, BlockProxy, BlockDatacenter, BlockTor.

[RequireHuman] est plus stricte que [BlockBots]; seules les demandes classées à titre humain sont autorisées par l’entremise de.

[AllowBots] exempte une action d’un contrôleur-level [BlockBots].

[BlockBots]
public class AccountController : Controller
{
    public IActionResult Login() { }          // blocked

    [AllowBots]
    public IActionResult HealthCheck() { }    // passes through
}

[BotPolicy("name")] applique une politique désignée, avec un point final facultatifM SK1surrides de niveau.

[BotPolicy("strict")]
[BotPolicy("strict", BlockThreshold = 0.75, MinConfidence = 0.85, ActionPolicy = "throttle-stealth")]

[BotDetector("names")] exploite des détecteurs spécifiques en ligne sans définir une politique complète.

[BotDetector("UserAgent,Header,Ip", BlockThreshold = 0.8)]

[BotAction("name")] supprime la réponse à l’action sans changer la politique de détection.

[BotPolicy("default")]
[BotAction("challenge-captcha", FallbackAction = "block")]
public IActionResult Checkout() { }

[BlockIfSignal] et [RequireSignal] entrée sur des signaux individuels de panneau noir.

[BlockIfSignal("ip.is_datacenter")]
[RequireSignal("geo.country_code", Value = "GB")]

[SkipBotDetection] parpasse la détection entièrement pour les contrôles de santé et les paramètres métriques.

Extensions de HttpContext

Toutes les données relatives à la classification sont disponibles directement dans les contrôleurs, Pages de razorM SK1 et API minimales:

// Classification
bool isBot      = HttpContext.IsBot();
bool isHuman    = HttpContext.IsHuman();
bool isVerified = HttpContext.IsVerifiedBot();
bool isSearch   = HttpContext.IsSearchEngineBot();

// Scores
double prob       = HttpContext.GetBotProbability();   // 0.0 - 1.0
double conf       = HttpContext.GetBotConfidence();
RiskBand risk     = HttpContext.GetRiskBand();         // VeryLow ... Critical
ThreatBand threat = HttpContext.GetThreatBand();       // None ... Critical

// Bot identity
BotType? type = HttpContext.GetBotType();
string?  name = HttpContext.GetBotName();

// Network
bool isDc  = HttpContext.IsDatacenter();
bool isVpn = HttpContext.IsVpn();
string? cc = HttpContext.GetCountryCode();

// Raw signals (blackboard passthrough)
T? val = HttpContext.GetSignal<T>("ip.is_datacenter");

// Recommended action
bool allow   = HttpContext.ShouldAllowRequest();
bool block   = HttpContext.ShouldBlockRequest();
bool captcha = HttpContext.ShouldChallengeRequest();

Dans un point final minimal de l’API:

app.MapPost("/api/order", (HttpContext ctx, OrderModel order) =>
{
    if (ctx.IsBot() || ctx.GetRiskBand() >= RiskBand.High)
        return Results.Forbid();

    return Results.Ok(ProcessOrder(order));
});

Les aides aux balises et les méthodes d'extension sont lues à partir du même résultat de détection par demande.


Ce que montre le tableau de bord

Le tableau de bord à /_stylobot est la vue opérationnelle en direct:

  • Des empreintes digitales: visiteurs distincts par empreinte digitale composite
  • Bot %: pourcentage de trafic classé par point final
  • Graphique de répartition: ratio humainM SK1bot par point final
  • Votre panneau de détection: comment la session courante a été classée , incluant les motifs et les détecteurs contribuants

/_stylobot dashboard sur une installation en direct: nombres globaux dans l'en-tête , trafic au fil du temps, Activité en direct par signature M SK3humains et botsMSC4 rangée selon le nombre d'attaques), et la table des points finals avec par=-pressure de la route pour les bots

Les barres divisées sont particulièrement utiles dans la pratique. Une page de produit qui fait fortement l’objet d’une tendance bot- la majorité est probablement en train d’être déclasséeM SK2 Un point d’entrée ou de sortie rouge est souvent testé par l’automatisation longtemps avant que les utilisateurs ne se plaignent .

Si vous voulez le modèle de niveau inférieur- derrière ces empreintes digitales et vecteurs de comportementM SK1 qui est couvert dans la première rubrique de cette série de mise à jour: Comportement, Non identité.


Le cas de l'un-line pour le comportement-aware UX

Block/allow est un interrupteur.Comportement -aware UX est un dialM SK3

Un interrupteur transforme l’incertitude en douleur: les faux positifs perdent leurs clients et les fausses négatifs détruisent leur valeur . un dial vous permet de façonner l’expérience au lieu de celle-ci M SK2 Vous pouvez cacher des offres , des flux lentesM SK4 éliminer le niveau élevé

C'est ce que l'interface de StyloBot est pour.

Suivant dans la série de sortie: Trouver et rétablir une croissance sans limites dans les services longs-Running .NET, le réaménagement de la fiabilité qui a transformé StyloBot' sa couche de similitude vectorale d’une bombe à temps de GB LOH 13 en quelque chose que vous pouvez laisser fonctionner sur un Pi indéfiniment M SK3 Après cela Behaviour-Aware TypeScript UI prend le même résultat de détection dans Express, Fastify, et le navigateur pour le clientM SK2 Adaptation latérale .

Finding related posts...
logo

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