This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Saturday, 02 May 2026
[!ОстереженняM SK1
Проект
Це проект релізу StyloBot Series. СтруктураМSK1 прикладиM SK2 і деталі API можуть все ще змінюватися перед кінцевим релізом
Серія випуску StyloBot
- Подібність, Не ідентичність - чому StyloBot моделює клієнтів поведінково
- Подібність-Усвідомлення ASP.NET UI - сервер - віддав поверхню над результатом виявлення
- Подібність-Усвідомлення інтерфейсу Java - клієнта - поверхня збоку та реальний МSK2 пристосування до часу
Штунок інтерфейсу StyloBot - це ASP. NET поверхня над Stylobotом ' результат виявления МSK2 його робота проста M SK3 зробити доступним робот і класифікацію ризиків там, де веб-приложения дійсно їх потребують , в розібранні Razor MSC5 бланки Mska6 контролери Мska7 та потоки сторінок M Ska8
Більшість систем UX є сліпими.
Цей пост - другий елемент в релізі StyloBot. Подібність, Не ідентичність закритий моделью під системою. Цей закриває поверхню ASPM SK1 NET, яка перетворює цю модель на поведінку застосування.
Уявіть, що детекція вже існує. Уявляйте, що теперішній запит вже має класифікований результат, який прикріплений до нього
Саме для цього є інтерфейс StyloBot . . Він дає ASP .NET чисту поверхню над результатом виявлення, так що перегляди Razor МSK2 контролери МSK3 і обробники сторінок можуть використовувати його безпосередньо
Таким чином, замість того, щоб відштовхувати тремтіння після факту, ви можете формувати досвід в часі рендерування.
Ця стаття говорить про те, що ASP. NET поверхня : вказівники на теґи M SK2 сторінка МSK3 зйомка рівня, , і сервера - інтеграція сторонніх сторінок Подібність, Не ідентичність, яка пояснює поведінкову модель під ним . Наступний artykuł охоплює Java-скрипт і клієнта M SK2 поверхню боку .
Головною ідеєю є просте: виявлення не має зупинятися на M SK1 дозволити" чи " блокуватиMSC4 В веб-приложенихMST5 він має бути доступним самому інтерфейсуMSL6
Це означає:
Якщо ви хочете розповісти історію детектора,, яка вже включена в Частина 2 і Частина 3. Ця стаття розпочинає один шар вище того, що : як тільки детекція вже є там МSK2 як ви відкриєте її чисто 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]
Без поверхні інтерфейсу, розпізнавання залишається всередині інфраструктуриM SK1
Ви можете зареєструвати рахунок. Можливо, ви можете блокувати запрошенняM SK1 Але ви не можете легко сказати:
Ось чому поверхня має значення. Він перетворює виявлення на логіку застосуванняM SK1
Інколи правильним відповіддю є блок.
Це диференціатор в інтерфейсі StyloBot. Машина розпізнавання дає вам вердикт; поверхня ASPM SK2 NET дозволяє вам зробити щось корисне з ним на рівні сторінки та потоку
У цій статті ми пройшли через приклад ASP.NET Core MVC магазину, який використовує вказівники інтерфейсу StyloBot на шість сторінок
Випробована програма навмисно маленька: генеровані продуктиM SK1 кілька категорій, вирахунокMSC3 бюллетеньMSL4 і логікс+. Річ у тому, що це не коммерційна логікаМSK6 Річи в тому, як класифікація роботів перетворюється на логіку застосуванняMسک7
Установити пакети:
dotnet add package Mostlylucid.BotDetection
dotnet add package Mostlylucid.BotDetection.UI
Тоді підключіть StyloBot до 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");
Це достатньо, щоб розпочати класифікувати запити і показувати результат Razorу, контролериM SK1 та живу панель приладів. Якщо ви хочете босого - мінімальної історії інтеграціїMSC4 Частина 3 пояснює це детальніше..
Ця сторінка є хорошим прикладом мікросхем, тому що вона показує цілу модель в кількох рядках
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");
Робот бачить попередження, потім перевертається в горшок з медом, якщо він посилаєM SK1 тоді отримує відторгнутий сервер- бо коли він якимось чином перехиляється від попередніх шарів . Кожний шар маленький МSK4 Разом вони створюють оборону в глибині без CAPTCHA
Решта цієї статті розширює цю ідею через реальний магазин
Головною комерційною проблемою є не те, що різні види автоматизації спричиняють різні види шкоди
Цінні крапки. Вони збирають назви продуктів, ціниM SK1 описи, і запасні дані, щоб конкуренти могли оцінювати ваші результати майже в реальному часі
Тестери ваучерів. Вони brute "-" наполягають на розрахунках кодів, доки не знайдуть корисних кодів МSK1 , які потім потрапляють на форуми купонів і зруйнують маржу
Посередники для credentials. Вони переграють витікаючий użytkownik-пари паролів на шкаліM SK1 Навіть низькі показники ударів стають новими, коли об 'єм є високим
Крейлери для навчання штучного інтелекту. Вони збирають описи, рецензіїM SK1 і редакційну копію для тренування моделей. Це не той самий модель загрози, що і атака на контрольно-пропускний пунктMSC3 але це все ще видобутокМSK4
Обробники газет. Вони досліджують анкети, щоб перевірити електронні адреси, отруйні mailing listsM SK1 або перевірити слабкості введення.
Це не одна й та сама проблема. МСК0, тож один блок. МSK1, всі стратегії хибні абстракції. МКС2, поведінка, МКС3, усвідомлена гра дає вам змогу відреагувати пропорційно
Главная - це місце, де починаються багато зламувачів. Вони хочуть каталогуM SK1 Ви хочете каталог, який можна використовувати для людей і indeksувати для пошуку, але менш комерційно цінний для автоматизованого видобуткуMSC3
Scenario: знижує ціни /; він бачить нейтральну інформацію з каталога , без приємної копії МSK2 і без підрахунку категорій
<!-- 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>
Це наказування, не управління доступомМSK1 сторінка все ще працюєМСК2 Як змінюється контекст навколо неїМ СК3 Це робить сторінку менш корисною для систематичного збору, не погіршуючи стосунки з клієнтамиMСК4
Саме тут і має значення розмежування crawlers. Ви хочете, щоб Googlebot indeksував продуктиM SK1 Ви можете не хотіти, щоб кожен автоматизований клієнт отримав таку ж комерційну презентацію, як людина, яка купує. Подібність поведінкиMSC3 усвідомлення рендеринга дозволяє відокремити " індексулябельніMST5 від M ST6 цінніМ ST7
На сторінці деталів товару стає чітким комерційним призначенням. Це також місце, де крадіжки цін та мисливці на ваучери шукають сигнали, про які вони хвилюються
Scenario: знижує ціни на /Product/Detail/12; він не бачить коду зniżki , ніякого додавання МSK2 до МSK3 кнопки картки М SK4 і ніякого сигналу покупки, щоб діяти на МSK5
<!-- 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>
Тут видно три корисних шаблони.
Ціль лояльності. Хороші oferty мають переходити на хороші сеанси. Показ знижків лише на низький рівеньМSK1 Ризиковий рух зменшує викиди та зменшує шанси, що кравери чи Botи з ваучерами піднімуть ofertęM SK2
Прогресивний тремтіння. Середній -Різик не означає автоматичного МSK1блокування МSK2 Спільні мережі , браузери конфіденциальності \ , і VPN усі створюють хибні позитивні дані \ МSK5 Застереження часто зберігає продаж краще, ніж жорстоке заперечення .
Сигнал-виведення рівняM SK1 ip.is_datacenter це сирий сигнал, не ризикова шкалаM SK1 Інколи політика, яка вас хвилює, не така: " наскільки ризикованою є ця відвідувачка в цілому МSK3 а такою:
Якщо ви хочете, щоб архітектура за цими сигналами Частина 2 поєднує етапно-детекторну трубку.
Ця відмінність проходить через решту зразка: МСК0 групи ризику формують широкі рішення щодо інтерфейсу UX , тоді як окремі сигнали керуються вузькими правилами політики .
Вирахунки найкращі-ціль цінності на сайтіМSK1 Автоматизація мошенницьких операційM SK2 тестування карт, зловживання купівлею kuponів
Scenario: ваучерM SK1 спроби bot hits /Cart/Checkout; він бачить мертву МSK1 закінчується повідомлення МSK2 надсилає медовий горшок - заповнений бланк МиSK4 і отримує мовчазну прийняття без стимулу для повторення спроб миSK5
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>
І в контроллері
[HttpPost]
public IActionResult Order(OrderModel model)
{
if (HoneypotValidator.IsTriggered(HttpContext))
{
// Silent accept - bot thinks the order succeeded
return RedirectToAction("Confirmed");
}
return ProcessOrder(model);
}
На цій сторінці показано три прийоми, які працюють разом.
Набір з меду Якщо робот заповнює приховані поля, то ти спокійно приймаєш та відкидаєш запит.
Ризик Express Checkout - це перевага для довіру, не поганий правоM SK1 Невірні сеанси можуть й далі купувати, але через повільніший шлях .
Благородна деградація. Проста інформація часто працює краще, ніж важка помилка.
Вход - це інший вид високого-цінної сторінкиM SK1 Метою є не зловживання картою, а доступ до аккаунтуМSK2 який змінює торгівлюMSC3оффи.
Scenario: credentialM SK1 закінчується сценарійом /Account/Login; він ніколи не бачить форми , заповнює горшок з медом 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>
Контролер надає остаточну перевірку:
[HttpPost]
public IActionResult Login(LoginModel model)
{
if (HoneypotValidator.IsTriggered(HttpContext))
return RedirectToAction("LoginDenied");
if (HttpContext.IsBot())
return RedirectToAction("LoginDenied");
return Authenticate(model);
}
Головним моментом є асимметрия витрат. Неправдоподібний позитивний результат при покупці може призвести до втрати продажіМSK1 Неправильний позитивний ефект при вході зазвичай коштує повторного спробиM SK2 Погане свідчення особи- Наслідування атаки коштує рахунокMSC4 Це означає, що цей кінцевий пункт може виправдовувати жорсткіше виконання
Зареєстрація на newsletter - це те місце, де робота з алгоритмом crawler стає особливо цікавою, тому що правильне рішення часто не так M SK1block."
Scenario: GPTBot hits /Newsletter/Subscribe; він бачить дані - повідомлення про ліцензію замість подписки МSK2 і його представлення формою мовчазно відкидається
Шриверки штучного інтелекту не хочуть купувати продуктів чи жорстоких записів. МСК0 – Accounts of Force, МСК1 – They are trying to harvest text, МSK2 - They are often honest about identity, , – Which means you can respond commercially instead of adversarially
<!-- 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>
І в контроллері
[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 });
}
І Thanks зображення може бути однаковим в обох випадках. Важливо те, що автоматизований клиент не може розрізнити успіх від мовчазного викидання
Тут також найважливіший тип робота. AiBot це не просто інший ворожий ярлик, це класифікація, яка може викликати бізнес-реакцію. Це інтерфейс для людей. МСК3 говорить з нами по-іншому. МSK4
І /Me сторінка - це програміст- звертається до сторінки утилітарностіM SK1 Відповідь на питання про практичну інтеграцію : що думає StyloBot, що ця просьба є
Scenario: один програміст щойно запустив StyloBot і хоче перевірити, чи сеанси браузера відіграють як людина, а curl балів як 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>
І через HttpContext розширення 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();
Для симуляції різних класифікацій під час розробки:
# 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
Встановити EnableTestMode: true всередині appsettings.Development.json якщо ви хочете, щоб ці заголовки були гідними.
Штунок інтерфейсу StyloBot має маленьке значення. Примітивні є простимиM SK1 комбінації - це місця, де з 'являється гнучкість
| Допомічник наклейок МSK1 Роль МSK2 Ключові атрибути | ||
|---|---|---|
<sb-human> |
Рендер тільки для людей fallback ("отоб ’ ясуватиМSK1ховатиМСК2, коли не класифікованіMСК3 domyślnieM СК4 відоб ্ ясовуватиМ СК5 М СК6 |
|
<sb-bot> |
Рендер тільки для роботів МSK1 fallback (по замовчуваннюM SK1 приховати ) МSK3 |
|
<sb-gate> |
Мульти-МSK1Звісно, що це кондиціональний вентиль. | |
<sb-signal> |
Спеціальна чорна панель сигналу signal, condition, value, fallback, negate |
|
<sb-honeypot> |
Невидимі пасійні поля МSK1 prefix, fields (1-3; за замовчаннямM SK1 2) | |
|
<sb-badge> |
Чип для визначення статусу variant МSK0повний"/"компактныйM SK2icon") МSK4 |
|
<sb-confidence> |
Бар ймовірності Bot display МСК0барМSK1текст"/"в обохM SK3 width |
|
<sb-risk-pill> |
Оznakування групи ризику | жодного МSK2 |
<sb-summary> |
Компактна картка для виявлення variant МSK0вживо"/"картаM SK2 МSK3 |
|
<bot-detection-details> |
Полний розрив визначення МSK1 collapsed МSK0bool), view ("defaultM SK1compact") |
<sb-gate> є об 'єктним- тягарем(МSK1)
<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>
Ризикові групи у порядку: VeryLow, Low, Elevated, Medium, High, VeryHigh, Critical.
<sb-signal> ворота безпосередньо на сильних сигналах чорного стола. condition атрибут приймає exists, not-exists, true, false, equals, not-equals, gt, lt, gte, lte, contains, any-true, і all-true.
<sb-signal signal="ip.is_datacenter" condition="true">...</sb-signal>
<sb-signal signal="detection.probability" condition="gte" value="0.8">...</sb-signal>
Важливим вибором дизайну є те, що ці допоміжники мають на меті відтворити, не блокуватиM SK1 Вони дозволяють вашій aplikacji висловити політику в інтерфейсі, не перетворюючи кожну непевність на заперечення
Для сервера - сторонне виконання , StyloBot також відображає рухові фильтры та атрибути сторінки МSK2 Якщо інтерфейсовий шар МSK3 показує дещо інше \ ," цей шар \ МSK5 робить дещо інакше ."
[BlockBots] повертає 403 для ботаM SK1 класифіковані запити , з опціональною дозволятим списком МSK3
[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
Дозволяти флаги: AllowVerifiedBots, AllowSearchEngines, AllowSocialMediaBots, AllowMonitoringBots, AllowAiBots, AllowGoodBots, AllowScrapers, AllowMaliciousBots, AllowTools.
Флаги мережі: BlockCountries, AllowCountries, BlockVpn, BlockProxy, BlockDatacenter, BlockTor.
[RequireHuman] є жорстшим, ніж [BlockBots]; лише запити, що класифіковані як людські, допускаються через .
[AllowBots] звільняє дії від рівня контроллера- [BlockBots].
[BlockBots]
public class AccountController : Controller
{
public IActionResult Login() { } // blocked
[AllowBots]
public IActionResult HealthCheck() { } // passes through
}
[BotPolicy("name")] застосовує policy на ім 'я, з опційним кінцевим пунктомM SK1переважає рівень.
[BotPolicy("strict")]
[BotPolicy("strict", BlockThreshold = 0.75, MinConfidence = 0.85, ActionPolicy = "throttle-stealth")]
[BotDetector("names")] запускає певні детектори в лінію без визначення повної політики.
[BotDetector("UserAgent,Header,Ip", BlockThreshold = 0.8)]
[BotAction("name")] заперечує реакцію на дію, не змінюючи політику виявлення.
[BotPolicy("default")]
[BotAction("challenge-captcha", FallbackAction = "block")]
public IActionResult Checkout() { }
[BlockIfSignal] і [RequireSignal] ворота на окремих чорних панелях сигналів.
[BlockIfSignal("ip.is_datacenter")]
[RequireSignal("geo.country_code", Value = "GB")]
[SkipBotDetection] обходить виявлення повністю для перевірок здоров 'я та кінцевих показників показників.
Всі класифіковані дані доступні безпосередньо в контроллерах, Разор PagesM SK1 і Minimal APIs :
// 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();
В Minimal API кінцевий пункт:
app.MapPost("/api/order", (HttpContext ctx, OrderModel order) =>
{
if (ctx.IsBot() || ctx.GetRiskBand() >= RiskBand.High)
return Results.Forbid();
return Results.Ok(ProcessOrder(order));
});
Вказівники та способи розширення зображень читають один і той самий результат виявления за запитом.
Панель на панелі /_stylobot це оперативне зображення в реальному часі
Розділні стовпчики є особливо корисними в практиці. сторінка продукту, яка сильно змінюється на ботіM SK1 більшість з них, напевно, викидається з крапів. Вход або контрольний пункт, що червоний, часто перевіряється автоматизацією довгий час до того, як користувачі скаржатьсяMSC3
Якщо ви хочете модель на нижньому рівні- за цими відбитками і векторами поведінкиM SK1, яка охоплена у першому місці в цій релізовій серії : Подібність, Не ідентичність.
Заблокувати/ дозволити - це перемикачM SK1 поведінка - усвідомити, що UX - це телефон
Перемикач перетворює невизначеность на болю: хибні позитиви втрачають покупців, а хибний негатив витікає з цінності . Сигнал дозволяє формувати досвід, замість цього МSK2 Ви можете приховати oferty MSC3 повільні потоки M SK4 видалити високі - довірливі вузькі шляхи
Саме для цього є інтерфейс StyloBot .
Далі в релізовій серії: Подібність-Усвідомлення інтерфейсу Java,, який забирає той самий результат виявлення в браузер і використовує його для клієнта - адаптації боків та реального M SK2 інтерактиву часу МSK3
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.