# StyloBot-julkaisusarja: Behaviour-Aware ASPM SK2NET UI

*Botin havaitseminen ei saa lopettaa sallimalla/block. Tämä artikkeli osoittaa, miten StyloBotin luokitustulosta tulee ASP:n soveltamisloogikastaMSC3NETM SK4 tag helpers RazorissaMSSK5 toiminnalliset filterit ja politiikat valvontalaitteissa , signaaliMST7taso-auttaminenMst8 niin että UI voi muokata kokemusta sen sijaan, että jarrutetaan sen jälkeen, kun tosiasia on todettu*

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

> **StyloBot -sarja**
> 
> 1. [**Käytänne, Ei identiteettiä**](/blog/stylobot-fingerprint): miksi StyloBot mallistaa asiakkaita käytännöllisesti
> 2. **Behaviour-Aware ASP.NET UI**: palvelijaM SK1 luovutti pintansa kyseisen havaitsemistuloksen yli
> 3. [**Pitkällä aikavälillä tapahtuvan -käynnissä olevan .NET-palvelujen rajaton kasvun löytäminen ja korjaaminen**](/blog/stylobot-release-reliability):, luotettavuuden kurinalaisuus, joka pitää moottorin tuskallisena tuotannossa
> 4. [**Behaviour-Aware TypeScript UI**](/blog/typescript-sdk): ExpressM SK1 Fastify, ja hakukonekomponentit
> 5. [**Sidecar-arkkitehtuuri**](/blog/sidecar-architecture): miten havaitsemismoottori liitetään muihin kuin -.NET-palkkiin
> 6. [**Oppiminen nopeuttamaan**](/blog/stylobot-release-learning): mukautuva oppimisjärjestelmä, , neljä,- tasotasoinen muisti ja , tuomiovarasto
> 7. [**Todistuksen testaaminen, joka ei jää rauhaan**](/blog/stylobot-release-nondeterministic-testing): tarkastusta koskevat säännökset : yksi BDF-tietokanta hallinnoi regressiaa M SK2 lastausta, , ja kalibrointia
> 8. [**StyloExtract - paikallisen oppimisen HTML:n Markdown-muuttaja**](/blog/stylobot-release-styloextract): HTMLM SK1Markdown-laaja, joka on päällekkäinen tunnistajan kanssa , walkinger bug lucidVIEW caught, ja dogfood loop, joka teki siitä rehellisen

StyloBot UI on ASP.NET-rakenne Stylobotin yläpuolella' havaitsemistarkoitustulosM SK2 Sen tehtävä on yksinkertainen : tehdä botti ja riskiluokittelu saatavissa siellä, missä web- sovellukset sitä todella tarvitsevat

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

# Esitys

Useimmat UX-järjestelmät ovat hämäriä.

Tämä post on StyloBotin toinen julkaisusarja. [Käytänne, Ei identiteettiä](/blog/stylobot-fingerprint) kattaa mallin järjestelmän alla. Tämä kattaa ASP:n.NET-pinnan, joka muuttaa kyseisen mallin soveltamiskäyttäytymiseksi

Olettakaa, että havaitseminen on jo olemassa. Olettakaan, että nykyisen pyynnön luokittelutulos on siihen jo liitetty

Tämä on StyloBotin UI:n tarkoitus. Se antaa ASPille.NETille puhdasta pintaa havaitsemistuloksessa, joten Razor-näkymiäM SK2 valvojatMSC3 ja sivukäsittäjät voivat käyttää sitä suoraan .

Joten sen sijaan, että kiinnittäisitte raivausta tosiasian jälkeen, voitte muokata kokemusta renderointiaikanaM SK1

- esittelemään erilaisia sisältöjä ihmisille ja boteille
- hide high-value UI epäilyttävistä istunnoista
- lisätään riskialoihin valuuttoihin painetta ennen kuin niistä tulee väärinkäytöksiä
- varmistaa valvojien noudattaminen samalla kun sivu pysyy kontekstissa-tietoisena

Tässä artiklassa käsitellään erityisesti sitä, että ASP.NET pinta-ala: tag helpersM SK2 sivuMSC3tasoäänestysten hallinnoiminen , ja serverin käyttöoikeudellinen integrointi [Käytänne, Ei identiteettiä](/blog/stylobot-fingerprint),, joka selittää sen taustalla olevan käyttäytymismallin . Seuraavassa artiklassa käsitellään JavaScriptia ja klienttia

[TOC]

# ASP.NET-pinta

Tällainen on käytös.

![Stylobotin taulukon yläpuolella oleva taulukko.net: kootaan vasemmistossa, , ja oikeistossa M SK3YOUMSC4 Inhimillinen 0.0% tuntematon näkökanta | →" | koostuu sb ‐- ‐leimasta |, ‐sb ­- ‐luottamuksesta |](stylobot-inline-badges.png?width=1100&format=webp&quality=70)

Tämä oikea- kädellinen ryhmittymä on kolme merkintäapua M SK1`<sb-badge>`, `<sb-confidence>`, `<sb-risk-pill>`) lukee samasta kutakin pyyntöä koskevasta havaitsemisesta johtuvan tuloksen, jonka valvoja ilmaisee

Keskeinen ajatus on yksinkertainen: havaitsemisen ei pitäisi pysähtyä M SK1 sallia" tai "blokoidaMSC4 Web-appissaMST5 sen pitäisi olla käytettävissä itse UI:ssäMSL6

Tämä tarkoittaa

- Razor voi tuottaa erilaisia sisältöjä ihmisille, bots, ja erityisiä bot-tyyppeitä
- lomakkeisiin voi sisältyä kerrostettuja suojakeinoja, kuten hunajapotteja osana sivua, eikä erillistä turvallisuusjärjestelmää
- valvojat voivat panna täytäntöön saman havaitsemisen tuloksen, jota on jo käytetty UI:ssä
- ASP.NET-app voi reagoida siihen, mitä pyyntö tekee, eikä vain siihen, ketä istunto väittää olevan

Jos haluatte détection engine story,, joka on jo sisällytetty [Osa 2](/blog/botdetection-part2-signature-pipeline-and-stylobot-architecture) ja [Osa 3](/blog/botdetection-part3-as-simple-as-possible). Tämä artikla aloittaa yhden kerroksen sen yläpuolella.

```mermaid
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]
```

## Miksi tämä pinta-ala on tärkeä

Ilman UI:n pinta-alaa havaitseminen pysyy infrastruktuurissa

Voitte rekisteröidä tulosta. Voitte ehkä estää pyynnön. Mutta ette voi sanoa helpostiM SK2

- esittelemään luettelon mutta salaamaan tarjouksen
- muutetaan login-lomaketta korkean riskin liikenteelle
- hakubotit voivat katsoa crawl-ystävällisiä metatietoja luovuttamatta kaikkia kaupallisia viestejä
- AI- crawlereihin suhtaudutaan pikemminkin lupakeskusteluna kuin hajanaiseen lomakkeen esittämiseen

Siksi pinta-ala on tärkeä. Se muuttaa havaitsemisen soveltamisloogikaksiM SK1

Joissakin tapauksissa oikea vastaus on lohko.

- kätkeet hyvityskoodit hintaskrappereista
- remove express checkout from elevated-risk sessions
- palvelemaan hakumetadataa paljastamatta kaupallisia signaaleja
- Silti hylätään tietokirjan allekirjoitukset automaattista
- lisätään hämmennystä epäiltyihin verkkovierailuihin rankaisematta tavallisia käyttäjiä

Tämä on StyloBotin UI:n eriyttäjä. havaitsemismoottori antaa teille tuomion; ASP-rakenneM SK2NET-pinta antaa teidät tehdä jotain hyödyllistä sen kanssa sivutasolla ja virtatasolla . MSC4Missä tuo tuomio on lähtöisin~, miten se~'s cached~ , ja miksi samasta tilanteesta peräisin olevien pyyntöjen jatkuvuus maksaa mikrosekkiä sen sijaan, että millisekkiä~M SK8 kattaa [Oppiminen nopeuttamaan](/blog/stylobot-release-learning).)

## Esimerkki kauppojen etupuolelta

Tässä artikkelissa tarkastellaan esimerkkiä ASP:sta, .:stä, NET Core-MVC:stä ja StyloBotin UI-apuvälineistä kuudessa sivussa.

Esimerkki-appi on tarkoituksellisesti pieni: tuotteista peräisin olevat tuotteet, muutamat luokkatM SK2 toimitustoteamus, , lehtitiedote, , ja verkkovierailu,. Kyse ei ole kaupankäynnistä johdettavasta logiikasta, vaan siitä, miten robotin luokittelusta tulee soveltamisloogia.

Pakettien asentaminen:

```bash
dotnet add package Mostlylucid.BotDetection
dotnet add package Mostlylucid.BotDetection.UI
```

Siirtäkää sitten StyloBot mukaan `Program.cs`:

```csharp
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");
```

Se riittää luokittelemaan pyynnöt ja esittelemään tulokset Razorille, valvontalaitteissa, ja suorassa taulukonhallinnassaM SK2 Jos haluatte avoimenMSC3 vähimmäisintegraatiokertomuksen [Osa 3 kattaa sen tarkemmin](/blog/botdetection-part3-as-simple-as-possible).

## Nopea esimerkki: login layered defence

Liittymissivu on hyvä mikro-esimerkki, koska siinä kuvataan koko malli muutamalla rivillä.

```mermaid
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]
```

```html
<!-- 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>
```

```csharp
// Layer 3: server-side final check before any processing
if (HoneypotValidator.IsTriggered(HttpContext) || HttpContext.IsBot())
    return RedirectToAction("LoginDenied");
```

Bot näkee varoituksen,, joka sitten putoaa hunajapotista, jos se antaa sen, ja sitten hylätään serveriM SK2 sivusta, jos hän jollakin tavalla ohittaa aiemmat kerroksetMSC3 Jokainen kerros on pieni . Yhdessä ne luovat puolustusta syvälle ilman CAPTCHA-merkintää.

Muutos tästä postista laajentaa tätä ajatusta todelliseen myyntipaikkaan.

---


## Kustannus siitä, että ei tiedetä, kuka on kaupassanne

Tärkein kaupallinen ongelma ei ole "bots" abstraktissa muodossaM SK2 vaan se, että erilaiset automaattiot aiheuttavat erilaisia vahinkoja

**Hintojen purkajat.** Ne keräävät tuotenimiä, hintoja, kuvaustaM SK2 ja varastotietoja, jotta kilpailijat voivat kilpailla kanssanne lähes reaaliaikaisesti

**Gutscheintesterit.** Ne brute-voimaa alennuskoodin tilaa, kunnes ne löytävät voimassa olevat kooditM SK1, jotka sitten julkaistaan coupon-foorumeissa ja erotetaan marginaaliin.

**Credential stuffers.** Ne pelaavat uudelleen vuodatusta käyttäjänimestä-password-paria mittakaavassaM SK1 Jopa alhaiset hyökkäysluvut muuttuvat tilisiirtotapahtumiksi, kun lukumäärä on suuri .

**AI-koulutus crawlerit.** Ne keräävät kuvaukset,arviot, ja mallikoulutusta varten laaditun lehden kopionM SK2 Tämä ei ole sama uhkamalli kuin checkout-hyökkäyksen tekijäMSC3, mutta se on edelleen ekstraktiivinen

**Newsletterin pyytäjät.** He tutkivat rekisteröintilomakkeita, joilla validoidaan sähköpostiosoitteet, myrkyllisten postiluettelojenM SK1 tai testataan injektioheikkouksia.

Nämä ongelmat eivät ole samat.

---


## Page 1: Lähtötaso

Kotisivulla monet romuttajat aloittavat. He haluavat luettelon. Te haluatte luetteloa, joka on käyttökelpoinen ihmisille ja indeksoitava hakutarkoituksiinM SK2 mutta vähemmän kaupallisesti arvokas automaattiselle raivaamiselle .

*Scenario: hintojen purkaminen koittuu `/`; se näkee puolueettoman luettelon viestin , ei tervetulleita kopioita*

```html
<!-- 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>
```

Nämä ovat viittauksia, eivät käyttöoikeutta koskevia valvontalaitteita. sivu toimii edelleenM SK2 Mitkä muutokset ovat sen ympärillä olevassa kontekstissa . Tämä tekee sivusta vähemmän hyödyllisen järjestelmällisen sadon aikaansaamiseksi heikentämättä kuluttajien kokemusta

Tämä on myös crawler-erottelun kannalta tärkeää. Te haluatte Googlebotin indeksoivia tuotteita. Te ette ehkä halua, että jokainen automatisoitu asiakas saa saman kaupallisen esityksen kuin ihmiskauppias.

---


## Page 2: Tuotteen sivu

Tuotteen yksityiskohtainen sivu on se, jossa kaupallinen tarkoitus tehdään selväksi. Se on myös se, missä hintaraiskaajat ja valtuutuksenurheilijat etsivät signaaleja, joita he pitävät tärkeänä.

*Scenario: hintaraiskaaja lands on `/Product/Detail/12`; se ei näe mitään alennuskoodia , ei lisätäM SK2to-kart-puppuaMSC4 eikä ole ostosignaalia toimimaan \.*

```html
<!-- 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>
```

Tässä on kolme hyödyllistä mallia.

**Loyalty targeting.** Hyvät tarjoukset on saatava hyviin tilaisuuksiin. alhaisiin alennettuihin alennettujen palkkioiden ilmoittaminenM SK1 riskiliikenne vähentää jätteitä ja vähentää mahdollisuuksia, että romuttajat tai valtuutettujen botit nostavat tarjouksen

**Progressiivinen jäykkyys.** Keskeinen-riski ei tarkoita automaattisesti M SK1blokointi*."yhdistettyjä verkkoja, yksityisyyden suojaa koskevat hakukoneet (*),* ja VPN-verkot kaikki luovat vääriä myönteisiä viestejä (*) . Varoitus usein säilyttää myynnin paremmin kuin ankara kieltäminen ()

**Signali-tasoäänestysM SK1** `ip.is_datacenter` on raaka- signaali, ei riskivyöhykeM SK1 Toisinaan politiikka, josta huolehditte, ei ole " kuinka vaarallinen tämä vierailija kokonaisuudessaan on?" vaan MSC4onko kyseinen omaisuus rikkonut liiketoimintasääntöäMST5

Jos haluatte näiden signaalien taustalla olevan rakenteen, [Osa 2 kattaa asteittaisen havaitsemisputken](/blog/botdetection-part2-signature-pipeline-and-stylobot-architecture).

Tämä ero on olemassa muissa näytteen maissa: : – riskivyöhykkeet muodostavat laajan UX-päätöksenteon, , – yksittäiset signaalit käsittelevät tiukempia poliittisia sääntöjä ja . –

---


## Page 3: Tarkastus

Kävitys on korkein -arvotavoite paikan päällä. petosten automatisointi , korttitestitM SK3 valtuutuksen väärinkäyttöMSC4 ja kirjoitetut retrit kaikki lähentyvät tänneMST5

*Scénario: osuuskorttiM SK1kokeet bot-iskut `/Cart/Checkout`; se näkee kuolleen - lopullisen viestin, , toimittaa hunajapotin,- täytetään lomake,, ja saa hiljaisen hyväksymisen ilman uudelleentryynnin kannustimia*

```mermaid
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]
```

```html
<!-- 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>
```

Ja valvonnassa:

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

    return ProcessOrder(model);
}
```

Tässä sivussa esitetään kolme yhteistä tekniikkaa.

**Honeypot discard.** Jos bot täyttää peitetyt kentät, olette tyynesti hyväksynyt pyynnön ja jättänyt sen pois.

**Riski** Express-checkout on luottamuksellinen etu, ei ole standardin mukainen oikeus . epäilyttävät istunnot voivat edelleen ostaa, mutta hitaammalla tiellä

**Hyvin huonontuminen.** Selkeä viesti on usein operatiivisesti parempi kuin vaikea virhe.

---


## Page 4: Login

Jäsenyys on erilainen korkean arvon `-`-valuutan sivu . -tarkoituksena ei ole karsin väärinkäyttö vaan tilinpääsy,, joka muuttaa kauppaa' M SK3 'offs'

*Scenario: todistusaineistoM SK1kirjanpitäjät `/Account/Login`; se ei koskaan näe kaavaaM SK1 täyttää hunajapotin , ja nousee `LoginDenied`.*

```html
<!-- 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>
```

Valvonta antaa lopullisen tarkastuksen:

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

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

    return Authenticate(model);
}
```

Keskeinen seikka on kustannusten epäsymmetria. virheellinen myönteinen selvitys voi menettää myynnin . virhellinen myöntävä liittymä yleensä maksaa uudelleenkäynnistämisen. puuttunut luottamuksellinen todisteM SK3 hyökkäyksen tukahduttaminen maksaa tilinpäätöksenMSC4 Tämä tarkoittaa, että tämä loppukohta voi oikeuttaa tiukemman täytäntöönpanon

---


## Page 5: Newsletter

Newsletterin allekirjoittaminen on se, missä AI- crawlerin käsittelystä tulee erityisen kiinnostavaa,, koska oikea vastaus ei useinkaan ole M SK1block."

*Scenario: GPTBot-iskut `/Newsletter/Subscribe`; se näkee tiedonM SK1 lisensointiviestin tilauspyynnön sijasta, , ja sen lomakkeen jättäminen hylätään hiljaisesti*

Älykkäitä crawlerejä ei yritä ostaa tuotteita tai raaka-aineita.

```html
<!-- 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>
```

Ja valvonnassa:

```csharp
[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 });
}
```

Euroopan unionin `Thanks` näkemys voi olla samanlainen molemmissa tapauksissa. Tärkeää on, että automaattinen asiakas ei voi erottaa menestystä hiljaisesta poisheittämisestä

Tämä on myös se paikka, jossa bot-tyypit ovat tärkeimpiä. `AiBot` ei ole vain toinen vihamielinen merkintä, se on luokittelu, joka voi herättää liiketoiminnan vastauksen.

---


## Page 6: My Detection

Euroopan unionin `/Me` sivu on kehittäjä-palvelusivun mukainenM SK1 se vastaa käytännön yhdentymiskysymykseen : mitä StyloBot uskoo tämän pyynnön olevan

*Scenario: kehittäjä on juuri ottanut käyttöön StyloBotin ja haluaa varmistaa, että hakukoneen istunnot suoritetaan ihmisinä ja että `curl` tulosten mukaan bot.*

```html
<!-- 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>
```

Se `<bot-detection-details>` panel on what stylobot.net renders on its own home page. Sama komponenttiM SK2 sama Razor tag

![bot-detectionMSC1details panel rendered on stylobot.netM SK3 Live MST4 Radarilla tapahtuvan havaitsemisenneMSSK5 MST6 bot probabilityMSV7 VeryLow riskMSR8 Allow policyMSL9 three contributing detectorsMSP10 Top Bots paneeli jäljempänä, jossa luetellaan todellisia tallennettuja botteja](stylobot-live-detection.png?width=1100&format=webp&quality=70)

Ja `HttpContext` laajentaminen API:

```csharp
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();
```

Erilaisten luokittelujen simulointi kehityksessä:

```bash
# 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
```

Määrä `EnableTestMode: true` sisällytetään `appsettings.Development.json` jos haluatte, että nämä otsikot ovat kunniallisia.

---


## Tagin avustajamalli

StyloBot UI on tarkoituksenmukaisesti pieni. Alkuperäiset ovat yksinkertaisia ; kombinaatiot ovat joustavuuden lähde

| Tag helper | Tehtävä SSK2 Keskeiset ominaispiirteet |
|---|---|---|
| `<sb-human>` | Vain ihmisille suoritettava `fallback` ("ilmoitettavaM SK1 salattava ", kun se ei ole luokiteltu
| `<sb-bot>` | Vain boteille suoritettava `fallback` (
| `<sb-gate>` | Multi -condition gate | ks. jäljempänä
| `<sb-signal>` | Yhteinen tekninen signaaliportti | `signal`, `condition`, `value`, `fallback`, `negate` |
| `<sb-honeypot>` | Invisible trap fields `prefix`, `fields` Ennakolta (1-3;
| `<sb-badge>` | Detektion status-kippi `variant` ("
| `<sb-confidence>` | Botin todennäköisyysasteikko | `display` ("bar `width` |
| `<sb-risk-pill>` | Risk-lipun merkintä
| `<sb-summary>` | Kompaktinen tunnistuskortti `variant` ("
| `<bot-detection-details>` | Täsmällinen havaitsemistapa `collapsed` (bool `view` ("defaultM SK1compact")  |

`<sb-gate>` on yleinen-purpose workhorseM SK1

```html
<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>
```

Riskivyöhykkeet järjestyksessä: `VeryLow`, `Low`, `Elevated`, `Medium`, `High`, `VeryHigh`, `Critical`.

`<sb-signal>` suljetukset suoraan raaka-alaisiin blackboard-signaaleihin. `condition` tunnus hyväksyy `exists`, `not-exists`, `true`, `false`, `equals`, `not-equals`, `gt`, `lt`, `gte`, `lte`, `contains`, `any-true`, ja `all-true`.

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

Tärkeää suunnitteluvaihtoehtoa on se, että nämä auktorit koskevat renderointia.

### Controller- ja Razor-sivujen ominaispiirteet

Serverin osalta:- sivun täytäntöönpanoa koskevat toimenpiteet:, StyloBot paljastaa myös toiminnalliset filterit ja sivu-ominaisuudet.

**`[BlockBots]`** palaa 403 botille-yleistettyjä vaatimuksia vartenM SK2 valinnaisten sallittujen luetteloiden kanssa .

```csharp
[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
```

sallia lippuja: `AllowVerifiedBots`, `AllowSearchEngines`, `AllowSocialMediaBots`, `AllowMonitoringBots`, `AllowAiBots`, `AllowGoodBots`, `AllowScrapers`, `AllowMaliciousBots`, `AllowTools`.

Verkon lipput: `BlockCountries`, `AllowCountries`, `BlockVpn`, `BlockProxy`, `BlockDatacenter`, `BlockTor`.

**`[RequireHuman]`** on tiukempi kuin `[BlockBots]`; sallitaan ainoastaan ihmisinä luokiteltuja pyyntöjä

**`[AllowBots]`** vapauttaa toimenpiteen valvojalta `[BlockBots]`.

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

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

**`[BotPolicy("name")]`** soveltaa nimenomaista politiikkaa, valinnaisen loppukohdan kanssa

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

**`[BotDetector("names")]`** hallinnoi tiettyjä havaintolaitteita inlinessä määrittelemättä koko politiikkaa.

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

**`[BotAction("name")]`** poistaa toiminnan vastauksen muuttamatta havaitsemispolitiikkaa.

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

**`[BlockIfSignal]`** ja **`[RequireSignal]`** suljetuskohta yksittäisten taulumerkkien osalta.

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

**`[SkipBotDetection]`** ohittaa havaitsemisen kokonaan terveystarkastuksia ja mittauskohtia varten.

### HttpContextin lisäykset

Kaikki luokittelutiedot ovat saatavilla suoraan valvontalaitteissa, Razor Pages, ja Minimal APIs :

```csharp
// 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();
```

Minimaalisessa API:n loppupisteessä:

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

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

Tag-apuvälineet ja laajentumismenetelmät luetaan samasta per-pyynnön havaitsemista koskevasta tuloksesta, joten ei ole toista havaitsemis Passia vain siksi, että UI kuluttaa sitä .

---


## Se, mitä taulukko osoittaa

Tausta-paneeli `/_stylobot` on suora toimintanäkymä:

- **Suujäljet**: erilaiset vierailijat yhdistettyjen sormenjälkien perusteella
- **Bot %**: osuus bot-liikenteestä
- **Jatkakaali**: inhimillinenM SK1bot-suhde loppukohtaa kohti
- **Tunnuspaneeli**: miten nykyinen istunto oli luokiteltu , mukaan lukien syyt ja osallistuvat havaintolaitteet

![/_stylobot- Dashboard -järjestelmä paikan päällä: otsakkeessa kootut luvut, ajan kuluessa tapahtuva liikenneM SK2 Live-toiminta allekirjoituksella | ( ihmiset ja botit |, tärkeysjärjestyksessä iskujen lukumäärän perusteella ♫), ♫ ja loppupistetaulukko per ♫ - ♫ reittiä käyttävän botin painetta ♫](stylobot-dashboard-landing.png?width=1100&format=webp&quality=70)

Split bars ovat erityisen hyödyllisiä käytännössä. Tuotteiden sivulla, joka suuntautuu voimakkaasti bottiin-dominant on todennäköisesti romutettuM SK2 Login- tai laskupisteen punaistuminen testataan usein automaattisella tavalla kauan ennen kuin käyttäjät valittavatMSC3

Jos haluatte alhaisemman tason mallin sormenjälkien ja käyttäytymisellisten vektoreiden takana, joka on esitetty ensimmäisessä julkaisusarjassa, [Käytänne, Ei identiteettiä](/blog/stylobot-fingerprint).

---


## One-line tapaus käyttäytymiseen-aware UX

Päätöslauselma

Vaihtaja muuttaa epävarmuuden tuskaksi: väärät myönteiset menettävät asiakkaita ja väärät kielteiset vuotavat arvoa . Numero antaa teille sen sijaan muotoilla kokemustaM SK2 Voit kätkeä tarjouksia, hitaat virtaukset, , poistaa korkeat, - luottamukselliset lyhyen matkan vaihtoehdot,, esittää vaihtoehtoisia teitä,, ja varata tiukat esteet tapauksiin, jotka itse asiassa oikeuttavat sen,MSC8

Tämä on StyloBotin UI:n tarkoitus. havaitseminen on saatavilla heti pyynnön alkuvaiheessa , sitten hakemuksenne päättää, mitä se merkitsee sivulle

Seuraava versio sarjasta: [**Pitkällä aikavälillä tapahtuvan -käynnissä olevan .NET-palvelujen rajaton kasvun löytäminen ja korjaaminen**](/blog/stylobot-release-reliability), luotettavuuden uudelleentarkastelu, joka muutti StyloBotin ' vector similarity layer -lähdestä GB LOH-aikapommi something you can leave running on a Pi indefinitely [**Behaviour-Aware TypeScript UI**](/blog/typescript-sdk) otetaan sama havaitsemistulos Expressiin, Fastify, ja Client-lähestymistapaan mukautettavaan ohjelmistoonM SK2