# **найяскравіший.отстеженняM SK1 боротьба проти бойовиків МSK2часть МSK3**

*Боксери збираються використовувати штучний інтелект, щоб наслідувати реальних користувачів. Тож я збудував детектор для роботів, який вчиться*

**Найголовніша концепція: Руйтинг поведінкиM SK1** Це дає можливість створити нову категорію -, де прозорі МSK1 пристосовні МSK2 команди " детекторів та систем навчання рефлікційно об 'єднують рух на основі з' ясованих моделей поведінки [Перехідник YARP](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway), Bots never reach your backend . Or use the middleware to build behavioural routing directly into your app layer

<pinned/>
<!--category-- ASP.NET, Bot Detection, Security -->
<datetime class="hidden">2025-12-08T07:00</datetime>

[![NuGet](https://img.shields.io/nuget/v/mostlylucid.botdetection.svg)](https://www.nuget.org/packages/mostlylucid.botdetection/)
[![GitHub](https://img.shields.io/github/stars/scottgal/mostlylucid.nugetpackages?style=social)](https://github.com/scottgal/mostlylucid.nugetpackages/blob/main/Mostlylucid.BotDetection/README.md)
[![Докер](https://img.shields.io/docker/pulls/scottgal/mostlylucid.yarpgateway)](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway)

---


## **Чому це існує?**

Розпізнавання роботів стало однією з найскладніших проблем у сучасній веб-інженериці.

Не тому, що боти стали розумнішими -, а тому, **штучний інтелект робив банальним імітувати справжнє поведінку користувача**:

* Обертання residential проксиess
* Неперевершеноważні відбитки пальців браузера
* Реальність руху миші
* Використовуючи JavaScript
* Пристосування при блокуванні

Коммерціальні рішення розв 'язують це. МСК0, але вони - МСК1, вони дорогі. МSK2, МСК3, місяць типовий, МSK4, закритий, МСК5, джерело, М СК6 і прив' язаний до конкретних CDN. МС К7. Ви ніколи не знаєте, що відбувається підhoodом.

Я хотів чогось іншого.

* Відкрий
* Місцеві
* Зрозумів
* Легко розширювати
* Найдешевший варіант: ( так , навіть на Raspberry Pi

Тож я створив **найбільш зрозуміле.botdetection** - модулярний МSK1 детектор для навчання роботів-ботів для МSK2 NET .

Спочатку це було просто, а потім стало чимось набагато цікавішим.

---


[TOC]

---


## **Конкретний приклад: ( Що це насправді захоплює?**

Ось реальний сценарій:

Шкраперові шлюпки:

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

Здається легітимним.

Але це *забув* заголовок Chrome завжди надсилає:

```
Sec-Fetch-Mode
```

І його `Accept-Language` заголовок не підходить’ не відповідає ствердженій локальностіM SK1

І швидкість запиту чітко автоматизована.

**Один сигнал непоганий. Другий підозрюваний . Третій - візеруальний**

Система запускає сигнал під час 100 мілісекунд - не потрібна штучний інтелект

Це основа всього дизайну:
**не покладатися на одну велику модель**

---


## Філософія системи

В основі цього проекту МСК0 - це не Бот-детекція , а "’". МСК2 , МСК3 - це спроба сприймати рух як живу систему, а не поток ізольованих запитів.

Сучасні скраївачі поводяться як пристосовні організми. МСК0, вони вчаться. МSK1, мутації. ММК2, аналіз слабкостей. ММСК3 і реагують на тиск.

Філософія тут проста: МСК0 – спостерігати сигнали, МСК1 – об 'єднувати їх, МSK2 – дозволяти їм взаємодіяти, , – адаптуватися з часом. МСК4 – замість одного робота - МСК5 – робота-бот, МСК6 – ні, ММСК7 - робота-bot, МПСК8 – перевірити, МНСК9 – машина перетворюється на мережу маленьких детекторів, МУСК10 – кожен з них вкладає дані у спільну таблицю, МАСК11 – де можуть з 'явитися вищі поведінки.

Система збудована так, щоб бути прозорою, що її можна пояснити, розширити та саморегулювати, скоректувати, регулювати з довгостроковою метою, яка полягає в тому, щоб поводитися менше як брандмауэр і більше як імунна система.

---


## **Як це працює (Short Version)**

Прохання просувається через кілька маленьких детекторів, кожен з них додає невеликий шматок доказуM SK1

Подумайте про це як про контрольний пункт безпеки аеропорту.

```mermaid
flowchart TB
    subgraph Request["Incoming Request"]
        R[HTTP Request]
    end

    subgraph FastPath["Fast Path (< 100ms)"]
        UA[User-Agent Check]
        HD[Header Analysis]
        IP[Datacenter IP Lookup]
        RT[Rate Anomalies]
        HE[Heuristic Model]
    end

    subgraph SlowPath["Slow Path (Async Learning)"]
        LLM[LLM Reasoning]
        Learn[Weight Learning]
    end

    subgraph Output["Decision"]
        Score[Risk Score 0-1]
        Action[Allow / Throttle / Block]
    end

    R --> UA & HD & IP & RT
    UA & HD & IP & RT --> HE
    HE --> Score --> Action

    HE -.-> LLM -.-> Learn
    Learn -.->|updates weights| HE

    style FastPath stroke:#10b981,stroke-width:2px
    style SlowPath stroke:#6366f1,stroke-width:2px
    style Output stroke:#f59e0b,stroke-width:2px
```

### **Швидший шлях (< 100msM SK2**

Працює синхронно. Не заважаєM SK1 не сповільнює вашу програму.

* Знані моделі роботів
* Відсутні заголовки справжні браузери завжди надсилають
* Іп 'и центрів обробки даних (AWS /AzureM SK2GCP)
* Рівень піків
* Недосконалості між заголовками UA +

Це ловить **80%** bots миттєво.

### **Повільний шлях (Асинк МSK1**

Працює в фоні.

* Герістичну модель з вчиними вагами
* Дослідження LLM за допомогою [Оллама](https://ollama.com/)
* Обновлення репутації шаблонів
* Забуваємо застарілі сигнали

Це ловить адаптивних роботів - тих, що більшість людей *думати* вони'захоплюють з M SK1регексом на пользователе -Агента

---


## **Попробуйте в 10 секундах**

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

```csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddBotDetection();

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

Все працює з коробки .

---


## **Що він виявляє? ( На перший погляд**

| Проверка МSK1 Що він знаходить МSK2
| --------------- | ------------------------------------------------- |
| **Użytkownik-Агент** | Знані ботиM SK1 бібліотеки, шрафери МSK3
| **Заголовки** | Позбавлені заголовків для безпеки , неможливі комбінації МSK2
| **І Пі** | Хворі хмари, які прикидаються бути
| **Рівень** | Автоматичні пульси МSK1 розподілене стирання МSK2
| **Сpójність** | “Chrome/120” без ChromeM SK3 реальний набір заголовків МSK4

Консистентність є функцією спальника - сучасні Bots можуть хитатися *один* сигнал, але зазвичай він провалюється на перехресті-сигнальний зв 'язокM SK1

---


## **Результат реального виявлення (Broken DownM SK1**

Ось так виглядає реальне виявлення. - це з демонстрації `fastpath` політика ( усі детектори паралельно ). в процесі виробництва МSK2 більшість заявок виходять рано після того, як лише

### Підсумок

```json
{
  "policy": "fastpath",
  "isBot": false,
  "isHuman": true,
  "humanProbability": 0.8,
  "botProbability": 0.2,
  "confidence": 0.76,
  "riskBand": "Low",
  "recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 20%)" },
  "processingTimeMs": 50.7,
  "detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral", "Heuristic", "VersionAge", "Inconsistency"],
  "detectorCount": 8,
  "earlyExit": false
}
```

**8 детектори працювали в 51ms** - те, що ' паралельне виконання через багато джерел доказів

### Доношення детектора

Кожен детектор спричиняє помірний вплив. Непоганий МSK1 людський сигналM SK2 Поганий

| Детектор МSK1 Враження МSK2 Вес | Вуждена မ်SK4 Причина мSK5
|----------|--------|--------|----------|--------|
| **Агент користувача** МSK0 -0.20 ♫ ♫ | ♫
| **Заголовок** МSK0 -0.15 ♫ ♫ МSK2 ♫
| **Застосування** | МSK1 ♫ ♫ | ♫
| **Герістичні** | -0.77 | 2.0 | **-1.54** МSK0 88% людська вірогідність
| **ClientSide** МSK0 -0.05 ♫ ♫ МSK2 ♫
| **вік версії** | -0.05 ♫ ♫ | ♫
| **Недосконалість** МSK0 -0.05 ♫ ♫ МSK2 ♫
| **І Пі** МSK0 0.00 ♫ ♫ | ♫

І **Хирічний детектор** тут домінує: - це ' має вагу МSK2x і використовує характеристики МSK3, щоб досягти мSK4 людської самовпевненості

### Збір сигналів

Кожен детектор випромінює сигнали, які входять у герістичний модель:

```json
{
  "ua.is_bot": false,
  "ua.raw": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
  "ip.is_local": true,
  "ip.address": "::1",
  "header.has_accept_language": true,
  "header.has_accept_encoding": true,
  "header.count": 16,
  "fingerprint.integrity_score": 1,
  "behavioral.anomaly": false,
  "heuristic.prediction": "human",
  "heuristic.confidence": 0.77,
  "versionage.analyzed": true
}
```

Ці сигнали зберігаються і тренують систему навчання протягом часу.

### Розділ категорій

Суммарні оцінки за категоріями для остаточного рішення:

МSK0 Категория | Оцінка МSK2 Ваги | Записки мSK4
|----------|-------|--------|-------|
| Герістичний МSK1 МSK2 \| 2.0 ♫ ♫ МSK5 ♫ Найсильніший людський сигнал ♫ | ♫
| Використовуючий агент МSK1 МSK2 | ♫ ♫ 1.0 | ♫ МSK5 ♫ Normalний браузер UA ♫
| Заголовок МSK1 МSK2 | MSК4 MSК5 Всі очікувані заголовки присутні МСК6
МSK0 Застосування | МSK2 |
| ClientSide МSK1 МSK2 | MSК4 MSК5 Дотримано справжнє відбитки пальців МСК6
| Версію МSK1 МSK2 |
| Недосконалість
| Іп МSK1 МSK2 \| | | 0.5 \ | МSK5 | локальний хост \  \dev нейтральний \ МSK7 \

**Увага балу: M SK1** → Сильний людський сигнал

> **Nota:** Це demo's `fastpath` політика, яка діє **всі** детектори для видимості. В реальному процесі виробництва з вимкненим раннім виходомМSK1 високийM SK2 запити на впевненість виходять лише після того, як **під 10ms**. МSK1 ms тут через те, що режим демонстрації не дозволяє ранньому виході показати всі вклади

### Полне Pipeline (Demo Mode with LLM)

Для порівняння: `demo` політика - повний трубопровод, включно з розрахунками LLM . Це показує, що відбувається, коли детектори **не погоджуватися**:

```json
{
  "policy": "demo",
  "isBot": false,
  "isHuman": true,
  "humanProbability": 0.87,
  "botProbability": 0.13,
  "confidence": 1.0,
  "botType": "Scraper",
  "riskBand": "Low",
  "recommendedAction": { "action": "Allow", "reason": "Low risk (probability: 13%)" },
  "processingTimeMs": 1370,
  "aiRan": true,
  "detectorsRan": ["UserAgent", "Ip", "Header", "ClientSide", "Behavioral",
                   "VersionAge", "Inconsistency", "Heuristic", "HeuristicLate", "Llm"],
  "detectorCount": 10
}
```

**10 детектори в МSK1 секунд** - LLM запустив і *не погоджувались* з герістикою.

| Детектор МSK1 Враження МSK2 Вес | Вуждена မ်SK4 Причина мSK5
|----------|--------|--------|----------|--------|
| **ЛЛМ** | +0.85 | 2.5 | **+2.13** | МSK1Кром, поширений у роботахM SK2 куки МSK3 підозрюваний референтор " \ |
| **Хевроістичний запізнення** МSK0 -0.77 ♫ ♫ МSK2 ♫
| **Герістичні** МSK0першу) M SK2 ♫ ♫ МSK3 ♫
| **Агент користувача** МSK0 -0.20 ♫ ♫ | ♫
| **Заголовок** МSK0 -0.15 ♫ ♫ МSK2 ♫
| **Застосування** | МSK1 ♫ ♫ | ♫
| **ClientSide** МSK0 0.00 ♫ ♫ МSK2 ♫
| **вік версії** | -0.05 ♫ ♫ | ♫
| **Недосконалість** МSK0 -0.05 ♫ ♫ МSK2 ♫
| **І Пі** МSK0 0.00 ♫ ♫ МSK2 ♫

Це цікавий випадок - **LLM назвав його потенційним роботом** тоді як всі статичні детектори сказали: Людина .

```json
{
  "ai.prediction": "bot",
  "ai.confidence": 0.85,
  "ai.learned_pattern": "Browser string suggests Chrome, common in bots. Presence of cookies and a specific referer also points to a potential bot."
}
```

Припущення LLM' записується як сигнал, що повертається до системи навчання . Упродовж часу МSK2 якщо ця модель і далі з 'являється та підтверджується як робота-траfic M SK3 геріотичні ваги будуть пристосовані .

Застерег:

1. **Герістичні гонки двічі** МSK0 рано ( перед всіма детекторами ) і пізно МSK3 після всіх доказів СМС4 Обидві сказали СМС5 людський МСМС6 з SМС7 впевненість SМС8

2. **LLM не погодився** - він виявив візерунки, які не вистачали статистичних детекторів . його МSK2 weighted impact partially counters the heuristic

3. **Ніяких відбитків пальців** - ClientSide повернув 0 тому, що JS ще не запустив МSK2 МSK3 В реальному браузері M, це додало б більше людського сигналу МСК5

4. **остаточне рішення: Дозволяти** - навіть з підозрюваністю ЛЛМ МSK1 МSK2 об 'єднані докази все ще сприяють людству (87%). Але `botType: "Scraper"` прапор означає, що його спостерігають

Розділ категорій показує напруження:

МSK0 Категория | Оцінка МSK2 Ваги | Записки мSK4
|----------|-------|--------|-------|
| **Герістичні** МSK0 -3.46 ♫ ♫ МSK2 ♫
| **Інтелект** МSK0 +2.13 ♫ ♫ МSK2 ♫
| Використовуючий агент МSK1 МSK2 |
| Заголовок МSK1 МSK2 | MSК4 MSК5 Всі заголовки присутні МСК6
| Подібність до поведінки
| ClientSide МSK1 МSK2 | MSК4 MSК5 Ще немає відбитків пальців МСК6
| Версію МSK1 МSK2 |
| Недосконалість
| IP МSK1 МSK2 |

**Увага балу: M SK1** → Людина виграє ,, але несогласия ЛЛМ МSK2 виражені

> **Ключеві ідеї:** Система не довіряє ні одному детектору, ні одному. Коли вони не погоджуються, докази обмірковуються і більшість виграє. Але думки меншості записуються для навчання.

> **Важливо:** Цей безглуздий вихід - це demo-only. В процесі виробництва , ви отримуєте коротку відповідь через HTTP заголовки M SK3`X-Bot-Confidence`, `X-Bot-RiskBand`, і т.д. `context.IsBot()` перевірити. Полний JSON - для відладки і налаштування M SK1 ви ' ніколи не надсилаєте це клієнтам МSK3

---


## **Використовуючи результати**

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

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

### Захищає кінцеві точки

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

Рівень ризику веде до дії:

МSK0 Ризик | Упевненість МSK2 Рекомендовані дії |
| -------- | ---------- | ------------------ |
| Трохи нижчий МSK1 МSK2 \0.3 | Дозволяти мSK5
МSK0 Піднято | МSK2 | Запис M/ ставкаМСК5limit МСК6
МSK0 Середній | МSK2 | Задача мSK4
| високий МSK1 МSK2 ♫ ♫ МSK3 ♫

---


## **Виявление штучного інтелекту (OptionalM SK1**

Не обов 'язково -, але корисно для ловлі передових автоматизованих системM SK1

### **Хирологічний детектор (Свидкий МSK1 Навчання МSK2**

Система включає в себе геристичний детектор, який використовує логістичну регресію з динамічно вивченими весами. Він починається з розумних початкових показників і еволюціонує на основі зворотнього зв 'язку з виявленнямM SK1

Типова затримка: **1–5ms**

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

Функції виділяються динамічно - нові візерунки автоматично отримують початкову вагу і вивчають з часом . Система відкриває, що має значення для *ваші* Verkehr.

### **Ollama LLM (Глибоке обґрунтуванняM SK1**

Приймає витікаючих роботів, які виглядають так: "fine" до швидких правилM SK2 Використовується [Оллама](https://ollama.com/) для локального висновку LLM.

```bash
ollama pull gemma3:1b
```

```json
{
  "BotDetection": {
    "AiDetection": {
      "Provider": "Ollama",
      "Ollama": { "Model": "gemma3:1b" }
    }
  }
}
```

ШІ - це **не вдалось-безпечно** - якщо це МSK1 знизився МSK2 розпізнавання продовжується нормально .

---


## **Система навчання:Adaptive,Not TriggerM SK2Happy**

Статичні блоквізори застаріли. Атакатори пристосовуютьсяM SK1
Отже, ця система вчиться

```mermaid
flowchart LR
    N[Neutral] -->|repeated bad activity| S[Suspect]
    S -->|confirmed| B[Blocked]
    B -->|no activity| S
    S -->|stays clean| N

    style B stroke:#ef4444,stroke-width:2px
    style S stroke:#eab308,stroke-width:2px
    style N stroke:#10b981,stroke-width:2px
```

Моделі руйнуються з часом:

* І Пі переназначуються
* Неправильні скрипти виправляються
* Трафік змінюється природно

Без руйнування ви заблокуєте законних користувачів назавжди.

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

---


## **YARP Gateway: захист країв для вашої додатки**

Там також є **Докер-перший YARP зворотній прокси** що запускає розпізнавання *до цього* запити на вашу програму.

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

Прокрутить його в одному рядку:

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

Працює на:

* Лінукс
* macOS
* Windows
* **ARM ( такM SK1 Raspberry Pi )**

Для налаштування маршруту:

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

---


## **Пристойна конфігурація виробництва**

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

---


## **Де це відбувається?**

Це частина 1 МSK1напис МSK2
Наступні частини викопають глибше:

* **Частина 2**: [Нові інтерфейси, пам 'ять для підписуM SK1 зворотній зв' язок ланцюгів реагування](/blog/post/botdetection-part2-signature-pipeline-and-stylobot-architecture)
* **Частина 3**: Аналітика поведінки
* **Частина 4**: KliënтM SK1затиск пальців
* **Частина 5**: Хирологічний детектор МSK1 вправні ваги для навчання
* **Частина 6**: Внутрішні модулі для виявлення LLM
* **Частина 7**: Система навчання правильно пояснена

**Майбутня дорожна карта:**

* RAG-побудований шаблон, який відповідає векторним вбудовам
* За допомогою локального маленького моделювання [Ламашарп](https://github.com/SciSharp/LLamaSharp) / NX
* Семантична подібність для виявлення нових шаблонів атаки

Якщо ви хочете бути детектором робота, *зрозуміти*, *розширювати*, і *бігати будь-де*, це для вас

---


## **Ліки**

* **GitHub:** повні документи
  [https://githubMSC1com/scottgalM SK3mostlylucidMスク4nugetpackages](https://github.com/scottgal/mostlylucid.nugetpackages)
* **NuGet:** заinstalувати пакет
  [https://wwwM SK1nuget.org /packagesMST4mostlylucidMSC5botdetection](https://www.nuget.org/packages/mostlylucid.botdetection)
* **Докер Hub:** Перехідник YARP
  [https://hubMSC1docker.comM SK3rMST4scottgalMSSK5mostlylucid .yarpgateway](https://hub.docker.com/r/scottgal/mostlylucid.yarpgateway)

**Не ліцензувати – публічний домен . використовувати його, як хочете**