75 lines
3.4 KiB
Markdown
75 lines
3.4 KiB
Markdown
---
|
||
name: anti-scraping
|
||
version: 4.0.0
|
||
description: "为 PHP Hyperf + Vue 3 应用设计反爬虫防护。当需要防御 Bot、限流或保护 API 时使用。覆盖五个威胁层级。"
|
||
---
|
||
|
||
# 🛡️ Anti-Scraping Protection — 全栈防爬体系
|
||
|
||
## 威胁分级与对应策略
|
||
|
||
| 等级 | 爬虫类型 | 典型工具 | 主要特征 | 防护策略 |
|
||
|------|---------|---------|---------|---------|
|
||
| **T1** | 简单脚本 | curl, wget, Python requests | 无 JS 执行,缺失必要 Header | UA 过滤 + Header 检查 |
|
||
| **T2** | 爬虫框架 | Scrapy, Playwright (无配置), httpx | 自动处理 Cookie 但行为机械 | Header 指纹 + 速率限制 |
|
||
| **T3** | 无头浏览器 | Puppeteer, Playwright (配置过) | 执行 JS 但 Canvas/WebGL 异常 | 浏览器指纹 + 行为分析 |
|
||
| **T4** | 分布式集群 | 自建集群 + 代理池 + UA 轮换 | 跨 IP 协同,单 IP 请求少 | 关联分析 + 蜜罐 + PoW |
|
||
| **T5** | AI 代理 | LLM 控制的浏览器 / GPT 插件 | 接近真实用户但行为规律性高 | 多维指纹 + CV 分析 + 挑战 |
|
||
|
||
---
|
||
|
||
## 触发条件
|
||
|
||
用户询问防爬虫、限流、Bot 防护、爬虫识别、AI 爬虫、Scrapy 等关键词。
|
||
|
||
## 执行流程
|
||
|
||
### Phase 0:威胁评估
|
||
|
||
在实施前回答以下问题,确定防护等级:
|
||
|
||
| 问题 | 回答影响 |
|
||
|------|---------|
|
||
| 保护目标?(API / 页面内容 / 数据资产) | 决定防护位置(Nginx / Middleware / Frontend) |
|
||
| 可接受的误伤率?(0.1% / 0.5% / 1%) | 决定阈值设定的松紧 |
|
||
| 是否有 CDN/WAF? | 可借用 WAF 能力,减少自研成本 |
|
||
| 业务是否允许验证码? | 影响 CAPTCHA 降级策略 |
|
||
| 需要保护登录后内容还是公开内容? | 决定是否使用前端指纹 Token |
|
||
|
||
### Phase 1–4:前置与基础防护
|
||
|
||
1. **Phase 1 Nginx** — UA 黑名单 map、limit_req/limit_conn,直接拒绝已知 Bot
|
||
2. **Phase 2 指纹** — RequestFingerprintMiddleware 检查 UA/Header/Accept/Referer,输出 risk_score
|
||
3. **Phase 3 限速** — RateLimitService 分层限速 + 请求间隔变异系数分析(CV)+ 子网关联分析
|
||
4. **Phase 4 IP** — IpIntelligenceService 黑/白名单、TOR、数据中心、爬取广度(HyperLogLog)
|
||
|
||
### Phase 5–6:高级识别
|
||
|
||
5. **Phase 5 浏览器指纹** — 前端采集 Canvas/WebGL/音频/字体/鼠标,后端校验无头特征
|
||
6. **Phase 6 AI 代理** — 请求间隔 CV、只读模式、速度、UA 与语言不匹配
|
||
|
||
### Phase 7–9:对抗与响应
|
||
|
||
7. **Phase 7 PoW** — 工作量证明挑战,真实用户 JS 自动计算
|
||
8. **Phase 8 蜜罐** — 前端隐藏字段 + 后端蜜罐路由
|
||
9. **Phase 9 综合** — AntiScrapingMiddleware 加权评分,差异化响应(封禁 / PoW / 延迟 / 假数据)
|
||
|
||
## 验证清单
|
||
|
||
1. [ ] `curl` 请求 3 次内触发 403 或 429
|
||
2. [ ] Python `requests` 默认 UA 被 Nginx 直接拒绝
|
||
3. [ ] Scrapy 爬取 100+ 页面被封 IP
|
||
4. [ ] Puppeteer(无反指纹)指纹得分 ≥ 60,触发挑战
|
||
5. [ ] 均匀间隔请求(CV < 0.2)被 AI 行为分析识别
|
||
6. [ ] 蜜罐路由访问后 IP 被封
|
||
7. [ ] PoW 挑战前端正确求解(difficulty=4,约 2 秒内完成)
|
||
8. [ ] 同 /24 子网 500+ 请求触发代理池标记
|
||
9. [ ] 正常用户误触率 < 0.2%
|
||
|
||
## Tier 3 深度参考
|
||
|
||
| 文件 | 内容 |
|
||
|------|------|
|
||
| `references/implementation-phases.md` | Phase 1–9 完整实现代码与 Redis 监控 |
|
||
| `references/anti-scraping-patterns.md` | 反爬模式与策略速查 |
|