☰
如何给 insane-search 添加新 WAF 画像:一份完整开发者扩展指南
2026/10/3 7:38:43 网站建设 项目流程

如何给 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_candidatesTLS 伪装候选组(按组排序尝试)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的组序。

五、三个新手最常见的坑 ⚠️

  1. 把站点名写进画像——一旦违反 No-Site-Name 规则,画像就变成"单站配方",bias_check 会直接拦截,也会让其他站点误匹配。
  2. 候选版本不存在——tls_impersonate_candidates里列的伪装目标必须与本机安装的 curl_cffi(≥0.15.0)支持的集合相交,引擎会在运行时自动过滤,但画像里仍建议只保留经验上"至少能拿到挑战页"的版本(详见 tls-impersonate.md 的版本对照表)。
  3. 漏配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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询