如何给 insane-search 添加新 WAF 画像:一份完整开发者扩展指南
【免费下载链接】insane-searchAuto-bypass for blocked websites in Claude Code — Phase 0→3 adaptive scheduler, no API keys项目地址: https://gitcode.com/gh_mirrors/in/insane-search
insane-search是 Claude Code 的公开页面读取插件:当网页被 WAF(Web 应用防火墙)拦截、返回 403 或人机验证时,它会按 Phase 0→3 自适应调度自动升级访问路线。它的"识别引擎"就是本文主角——WAF 画像(WAF Profile)。学会扩展 WAF 画像,你就能让 insane-search 认识 Akamai、Cloudflare 之外的新防护产品,并自动为其挑选最优的 TLS 伪装与浏览器路线。
一、WAF 画像到底在做什么?
你可以把 WAF 画像理解成一份"防护产品的体检卡":当请求被拦截时,waf_detector.py 会读取响应的 Cookie、响应头、Server 字段和页面正文,比对各画像里登记的"厂商特征",输出一个按置信度排序的候选列表(而非武断的单一结论)。随后 fetch_chain.py 根据最高分画像推荐的路线组合——TLS 伪装目标 × URL 变体 × Referer 策略——逐个尝试,直到某条路线拿到干净内容。
目前内置画像包括:akamai_bot_manager、cloudflare_turnstile、f5_big_ip、aws_waf、datadome_probable、perimeterx_human、kasada_ips、imperva_incapsula,外加一个"兜底画像"unknown_challenge。
二、什么时候需要新增画像?
满足以下任一条件,就该考虑新增(或细化)画像了:
- 📌 引擎 trace 里反复出现某个尚未登记的防护产品特征(如新 Cookie 族、新拦截页文案),最终都落进
unknown_challenge兜底; - 📌 某个已识别产品的现有路线全部失败,需要你补一条更精准的候选路线;
- 📌 同一防护产品在不同站点表现差异大,需要独立画像避免"选错兜底策略"。
参考项目自身的经验:SKILL.md 中明确写着——同一 WAF 特征在 3 次以上重复观测、且对使用同一 WAF 的其他站点也有效时,才值得沉淀为画像条目。
三、画像文件的五个关键字段
所有画像集中在 waf_profiles.yaml 一个文件里,每个画像由五块组成:
| 字段 | 作用 | 示例(摘自 Akamai 画像) |
|---|---|---|
detectors | 厂商特征:cookie / header / server 子串 / 正文标记 | cookie:_abck、bm_sz;body:sec-if-cpt-container |
confidence_rules | 多信号门控:几个信号算高置信 | 2 个信号 → 0.9,1 个 → 0.6 |
capabilities_needed | 需要的能力标签,决定最终走哪种浏览器 | needs_real_tls_stack、needs_js_exec |
tls_impersonate_candidates | TLS 伪装候选组(按组排序尝试) | safari 组 → chrome 组 → edge 组 |
fallback_when_challenge | 挑战页出现后的升级路线 | protocol_stealth_chrome→playwright_real_chrome |
新增一个画像的最小骨架(示意,约 10 行即可运行):
my_new_waf: detectors: cookie: ["some_vendor_cookie"] header: ["x-vendor-*"] body: ["Vendor challenge page text"] confidence_rules: strong: 2 weak: 1 capabilities_needed: - needs_js_exec tls_impersonate_candidates: - [safari, chrome] fallback_when_challenge: - playwright_real_chrome四、四步上手添加你的第一个画像
第 1 步:确认厂商特征(最关键)
打开一次被拦截响应的 trace,找出该防护产品在任何部署它的站点上都会出现的产物——Cookie 名、响应头前缀、拦截页固定文案。特征必须"产品级",而不是"某个站点级"。
第 2 步:写入画像
把骨架填入 waf_profiles.yaml,并在头部_meta.last_reviewed更新审查日期。文件注释要求:每个画像条目带时间戳,超过 6 个月未复核应交叉验证——因为厂商会调整其信任的 TLS 指纹版本。
第 3 步:通过偏见检查
项目用 bias_check.py 作为 CI 门禁,执行python3 engine/bias_check.py。它的核心就是No-Site-Name 规则:画像里严禁出现具体站点域名、URL、CSS 选择器或品牌名。判断标准很简单——"这条特征换一家用同款 WAF 的站点还成立吗?"成立才属于画像,否则应作为运行时user_hint传递。
第 4 步:验证与观察
- 跑冒烟测试确认 YAML 可被正确加载:
engine/tests/下的 test_smoke.py 会校验_load_profiles()的形状; - 用
python3 -m engine "<URL>" --trace观察新画像是否被命中、置信度是否合理; - 运行结果会自动追加到 observations 日志,积累 3 次以上一致的成功证据后,再微调
tls_impersonate_candidates的组序。
五、三个新手最常见的坑 ⚠️
- 把站点名写进画像——一旦违反 No-Site-Name 规则,画像就变成"单站配方",bias_check 会直接拦截,也会让其他站点误匹配。
- 候选版本不存在——
tls_impersonate_candidates里列的伪装目标必须与本机安装的 curl_cffi(≥0.15.0)支持的集合相交,引擎会在运行时自动过滤,但画像里仍建议只保留经验上"至少能拿到挑战页"的版本(详见 tls-impersonate.md 的版本对照表)。 - 漏配
fallback_when_challenge——不配挑战后的升级路线,TLS 网格耗尽就无路可走;至少给出playwright_real_chrome这类兜底。
另外记住:如果 waf_profiles.yaml 缺失或解析失败,waf_detector.py 会优雅降级到内置的unknown_challenge代码内默认画像,并在 trace 中记录last_load_error——所以即使 YAML 写坏了,引擎也不会崩溃,只会"变保守"。
六、相关路径速查
| 内容 | 路径 |
|---|---|
| 画像定义(本文主角) | engine/waf_profiles.yaml |
| 检测与评分算法 | engine/waf_detector.py |
| 链式调度与计划构建 | engine/fetch_chain.py |
| 规则手册(R1–R8 与 No-Site-Name Rule) | SKILL.md |
| TLS 伪装版本与组合参考 | references/tls-impersonate.md |
| 浏览器兜底策略选择 | references/playwright.md |
| 偏见检查门禁 | engine/bias_check.py |
| 画像加载冒烟测试 | engine/tests/test_smoke.py |
💡 小提示:画像只是先验推荐,不是确定性配方——规划器永远以真实响应评估每一次尝试。写画像时保持"保守候选 + 宽门控",让数据替你优化,这正是 insane-search "escalates, never pre-judges(只升级,不预判)"设计哲学的精髓。
【免费下载链接】insane-searchAuto-bypass for blocked websites in Claude Code — Phase 0→3 adaptive scheduler, no API keys项目地址: https://gitcode.com/gh_mirrors/in/insane-search
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考