найяскравіший.отстеженняM SK1 боротьба проти бойовиків МSK2часть МSK3 (Українська (Ukrainian))

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

Monday, 08 December 2025

//

12 minute read

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

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

NuGet GitHub Докер


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

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

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

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

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

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

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

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

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



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

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

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

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

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

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 за допомогою Оллама
  • Обновлення репутації шаблонів
  • Забуваємо застарілі сигнали

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


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

dotnet add package Mostlylucid.BotDetection
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 більшість заявок виходять рано після того, як лише

Підсумок

{
  "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 людської самовпевненості

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

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

{
  "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 . Це показує, що відбувається, коли детектори не погоджуватися:

{
  "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 назвав його потенційним роботом тоді як всі статичні детектори сказали: Людина .

{
  "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 SK3X-Bot-Confidence, X-Bot-RiskBand, і т.д. context.IsBot() перевірити. Полний JSON - для відладки і налаштування M SK1 ви ' ніколи не надсилаєте це клієнтам МSK3


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

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

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

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

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

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

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

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

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

ollama pull gemma3:1b
{
  "BotDetection": {
    "AiDetection": {
      "Provider": "Ollama",
      "Ollama": { "Model": "gemma3:1b" }
    }
  }
}

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


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

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

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

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

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

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

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

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

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

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

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

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

Працює на:

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

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

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

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

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

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

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

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

  • RAG-побудований шаблон, який відповідає векторним вбудовам
  • За допомогою локального маленького моделювання Ламашарп / NX
  • Семантична подібність для виявлення нових шаблонів атаки

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


Ліки

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

Finding related posts...
logo

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