rhamenator/ai-scraping-defense-iis
GitHub: rhamenator/ai-scraping-defense-iis
面向 Windows Server/IIS 环境的 ASP.NET Core 防御框架,通过实时检测、Tarpit 诱捕、行为分析和社区协同等多层机制对抗未经授权的 AI 爬虫抓取。
Stars: 1 | Forks: 0
# AI Scraping 防御 (.NET)
本仓库正重新定位回其初衷:实现一个纯 .NET 的 `ai-scraping-defense` 技术栈,而不是一个 IIS 到 Linux 的控制平面适配器。
当前代码库现已在 [RedisBlocklistMiddlewareApp/Program.cs](RedisBlocklistMiddlewareApp/Program.cs) 中包含首个 .NET 原生防御切片:
- 基于 Redis 的边缘 IP 黑名单强制执行。
- 针对已知恶意 User-Agent、格式错误的 Headers 和可疑路径的启发式请求检测。
- 具有后台分析工作线程的有界可疑请求队列。
- 基于 Redis 的请求频率跟踪,用于简单的升级决策。
- 通过配置的 CIDR 信誉范围、可选的 HTTP 信誉检查以及可选的 OpenAI 兼容分类器钩子实现的可插拔升级机制。
- 返回合成 HTML 和递归链接的确定性 Tarpit(诱导陷阱)端点。
- 位于 `/defense/events` 的轻量级认证事件源,用于记录最近的决策。
- 位于 `/defense/*` 下的认证操作员指标和黑名单管理端点。
- 带有基于 SQLite 的持久化存储的认证 `/analyze` Webhook 端点,用于接收已确认的恶意事件。
- 可选的社区黑名单源同步,并在 `/defense/community-blocklist/status` 下显示认证状态。
- 可选的 Peer 同步功能,支持显式的 `ObserveOnly` 和 `BlockList` 信任模式,以及位于 `/peer-sync/signals` 的认证信号导出。
- 可选的 PostgreSQL 支持的 Markov Tarpit 内容,具有确定性渲染变体。
## 商业 v1 范围
首个商业版本是一个单一可部署的 ASP.NET Core 服务,在 .NET 中提供核心 `ai-scraping-defense` 工作流:
- 在边缘检查入站请求
- Tarpit(诱捕)可疑流量
- 持久化防御决策和操作员可见的事件
- 接收用于已确认恶意流量的认证 Webhook
- 通过认证的操作员端点封禁和解封 IP
这在 v1 中故意设计为模块化单体。它保留了上游的功能角色,但在 .NET 契约和生产行为稳定之前,将它们保留在一个部署单元中。
请参阅 [docs/architecture.md](docs/architecture.md) 了解当前架构,[docs/commercial_scope.md](docs/commercial_scope.md) 了解 v1 定义,以及 [docs/dotnet_parity_roadmap.md](docs/dotnet_parity_roadmap.md) 了解 v1 后的平衡队列。
## 已实现的端点
- `GET /health`
- `GET /anti-scrape-tarpit/{path}`
`GET /defense/events` 仅在配置了 `DefenseEngine:Management:ApiKey` 时暴露。
`GET /defense/metrics` 和黑名单管理端点通过配置的 `DefenseEngine:Management:ApiKeyHeaderName` Header 遵循相同的 API 密钥保护。
`POST /analyze` 仅在配置了 `DefenseEngine:Intake:ApiKey` 时暴露,并期望配置的 `DefenseEngine:Intake:ApiKeyHeaderName` Header。
管理端点:
- `GET /defense/events?count=50`
- `GET /defense/metrics`
- `GET /defense/community-blocklist/status`
- `GET /defense/peer-sync/status`
- `GET /defense/blocklist?ip=203.0.113.10`
- `POST /defense/blocklist?ip=203.0.113.10&reason=manual_block`
- `DELETE /defense/blocklist?ip=203.0.113.10`
Webhook 接收端点:
- `POST /analyze`
- 主体结构反映了旧版 AI 服务 Webhook:`event_type`、`reason`、`timestamp_utc`、`details`
- `details.ip` 是必需的,并且必须是一个有效的 IP 地址
- 接受的事件在后台处理之前会被持久化写入
Peer 导出端点:
- `GET /peer-sync/signals?count=200`
- 仅在配置了 `DefenseEngine:PeerSync:ExportApiKey` 时暴露
- 需要配置的 `DefenseEngine:PeerSync:ExportApiKeyHeaderName` Header
- 将最近的封禁防御决策导出为可共享的 Peer 信号
## 支持的数据存储
- `Redis`:热操作状态(如黑名单和短窗口频率计数器)所需。
- `SQLite`:支持用于本地开发、演示和单节点/轻量级生产安装,作为持久化审计和 Webhook 接收存储。
- `PostgreSQL`:支持 Markov 支持的 Tarpit 语料库,并且仍然是主要的生产关系型方向,用于更丰富的内容和更大规模的持久化。
- `SQL Server`:已延期。除非客户需求证明额外的提供者和测试覆盖面是合理的,否则它不是商业 v1 的目标。
## 升级扩展
排队的可疑请求分析现在持久化一个分数细分,包含来自以下方面的命名贡献:
- 基础边缘启发式
- 短窗口请求频率
- 配置的 CIDR 信誉范围
- 可选的 HTTP 信誉提供者
- 可选的 OpenAI 兼容分类器端点
默认配置保持外部信誉/模型钩子禁用。它们在 `DefenseEngine:Escalation` 下暴露,以便生产部署可以选择加入,而无需更改请求管道的其余部分。
## PostgreSQL Tarpit
Tarpit 现在可以在 `DefenseEngine:Tarpit:PostgresMarkov` 下从固定的合成段落切换到 PostgreSQL 支持的 Markov 语料库。启用后,应用程序读取 `markov_words` 和 `markov_sequences` 表,并使用持久化语料库生成确定性的浪费爬虫时间的段落。基础 Schema 位于 [init_markov.sql](/home/rich/dev/ai-scraping-defense-iis/db/init_markov.sql)。
## 配置
.NET 防御基础在 `DefenseEngine` 部分下的 [RedisBlocklistMiddlewareApp/appsettings.json](RedisBlocklistMiddlewareApp/appsettings.json) 中配置。
关键区域:
- `DefenseEngine:Redis`
- `DefenseEngine:Heuristics`
- `DefenseEngine:Networking`
- `DefenseEngine:Management`
- `DefenseEngine:Intake`
- `DefenseEngine:Audit`
- `DefenseEngine:Escalation`
- `DefenseEngine:CommunityBlocklist`
- `DefenseEngine:PeerSync`
- `DefenseEngine:Queue`
- `DefenseEngine:Tarpit`
对于直接边缘部署,请将 `DefenseEngine:Networking:ClientIpResolutionMode` 保留为 `Direct`。如果应用程序位于反向代理或 CDN 后面,请将其切换为 `TrustedProxy`,并使用您明确信任的代理 IP 填充 `DefenseEngine:Networking:TrustedProxies`。
防御决策现在通过 `DefenseEngine:Audit:DatabasePath` 持久化到 SQLite,这使得最近的事件历史记录在重启后仍然可用。
在 `Production` 环境中,如果 Redis 仍然指向像 `localhost` 这样的环回端点,启动现在会快速失败,除非您使用 `DefenseEngine:Redis:AllowLoopbackConnectionStringInProduction` 显式选择加入。
## 状态
该项目现在有一个明确的 commercial-v1 目标,但发布准备就绪仍取决于解决 [docs/release_blockers.md](docs/release_blockers.md) 中的剩余项目以及 [docs/dotnet_parity_roadmap.md](docs/dotnet_parity_roadmap.md) 中的 v1 后平衡队列。
标签:AI 爬虫防御, ASP.NET Core, ATT&CK 防护, CIDR 声誉, CISA项目, IIS 安全, IP 黑名单, LLM 集成, Petitpotam, PostgreSQL, Redis, SQLite, Tarpit, WAF, Windows Server, 反爬虫, 多人体追踪, 恶意请求检测, 搜索引擎查询, 机器人流量管理, 测试用例, 网络安全, 网络应用防火墙, 蜜罐技术, 边缘计算, 防御策略, 隐私保护