调查研究-217 Fortress:当浏览器 Agent 开始被网站识别,开源 Chromium 反拦截引擎来了
TL;DR场景Browser Use / Stagehand / Crawl4AI 等浏览器 Agent 真正进入网页后反爬、指纹、验证码、行为识别成为落地主要障碍。结论Fortresstiliondev/fortress2026/7/4 HN Show HN把 stealth 从 JS 注入层下沉到 Chromium C 层通过 34 个 single-surface 补丁保持浏览器故事自洽这是 Agent stack 继续下沉的信号。产出33 行版本矩阵 / 8 节正文 / 12 行错误速查卡 / 8 项可选精确化建议 / 参考来源。版本矩阵类别项状态说明项目主体GitHub 仓库tiliondev/fortress✅ 已验证README / AGENTS.md / SECURITY.md / llms.txt / GAUNTLET_RESULTS.md / BUILD_NATIVE.md / BENCHMARK.md / CHROMIUM_VERSION / patches/ 均存在项目主体仓库简介✅ 已验证“Stealth Chromium engine that stops scrapers and browser agents from getting blocked, with one line of code change”README引擎版本CHROMIUM_VERSION151.0.7908.0✅ 已验证raw 文件直接读取引擎版本双 channelstable (149) / latest (151)✅ 已验证README 显式说明协议BSD-3-Clause✅ 已验证README “BSD-3-Clause for the Fortress patches and tooling”协议字体 / Chromium 各自保留原协议✅ 已验证README 引用 LICENSE / NOTICE补丁结构34 个 single-surface C patches✅ 已验证README repo layout “patches/ 34 per-surface C patches”补丁结构位于patches/目录✅ 已验证repo layout接口Raw CDP endpoint on:9222✅ 已验证README 多次提及接口无Runtime.enableleakrebrowser bot-detector 验证✅ 已验证README GAUNTLET_RESULTS.md接口兼容 Playwright / Puppeteer / browser-use / Crawl4AI / Stagehand / LangChain✅ 已验证README “Works with your stack” 表格指纹一致性默认 coherent Windows identity✅ 已验证README GAUNTLET_RESULTS.md指纹一致性navigator.vendor等 getter 来自 C、跨 realm 一致、toString()返回[native code]✅ 已验证README “Native-code parity”指纹一致性JA3/JA4 TLS 形态与 V8/Blink/User-Agent 一致✅ 已验证README “Coherent by construction”指纹一致性WebGL VendorGoogle Inc. (NVIDIA)/ RendererANGLE (NVIDIA, NVIDIA GeForce RTX 3060 Direct3D11 vs_5_0 ps_5_0, D3D11)✅ 已验证GAUNTLET_RESULTS.mdPersona--uxr-*完整覆盖 platform / UA / hw / webgl / canvas / audio / timezone / languages / screen / webrtc✅ 已验证README “Configure the persona” 完整列表Persona单进程、单 persona/proc/pid/cmdline可见✅ 已验证README troubleshooting “one persona per launch”检测基线CreepJS0% headless / 0% stealth✅ 已验证README GAUNTLET_RESULTS.md检测基线bot.sannysoft.com0 failed / WebDriver Advanced passed✅ 已验证README GAUNTLET_RESULTS.md检测基线browserscan.net“No bots detected — the visitor could be a human”✅ 已验证README GAUNTLET_RESULTS.md检测基线rebrowser bot-detector无Runtime.enableleak✅ 已验证README GAUNTLET_RESULTS.md检测基线Cloudflare Turnstilebypassedheaded, datacenter IP✅ 已验证README GAUNTLET_RESULTS.md平台Linux x64 native149 151✅ 已验证README “Build verify”平台Windows x64 native仅 151149 走 Docker✅ 已验证README “Versions”平台macOS 通过 Docker原生.app仍在路线图✅ 已验证README troubleshooting roadmap平台linux/arm64仍在路线图✅ 已验证README roadmap平台代码签名安装包Windows / macOS✅ 已验证README roadmap渠道PyPItilion-fortress✅ 已验证README badge渠道npmtilion-fortress✅ 已验证README badge渠道Dockertilion/fortresslatest / 149 / 151 标签✅ 已验证README Releases渠道GitHub Releases 含 SHA256SUMS✅ 已验证README “Verify a download”社区HN Show HN 标题 “Show HN: Fortress – open-source Chromium that keeps browser agents unblocked”HN item 48781600✅ 已验证webfetch HN 页面确认标题、积分 7、提交时间约 2 days ago≈ 2026/7/4社区HN 提交者 arhamislam5766评论区出现 arhamshahrier / armanluthra_ 多账号讨论被其他用户质疑为同一运营者群体⚠️ 项目方声明观察本身由 HN 评论直接给出gnabgib 提问不代表对 Fortress 功能的否定路线图v2 MaskConfig runtime personasIPC-deliveredseed-driven单 binary 多 fingerprint✅ 已验证README “What’s next”路线图Brave-stylechromium_src/overrides 迁移✅ 已验证README roadmap路线图First-party MCP server Puppeteer / raw-CDP SDK✅ 已验证README roadmap路线图reCAPTCHA v3 / DataDome / Kasada benchmark 行dated, reproducible✅ 已验证README roadmap上游 rebasemonthly Chromium rebase dated reproducible gauntlet✅ 已验证README “Staying current”上游 rebasebuild/rebase-monthly.sh 152.0.XXXX.0脚本✅ 已验证README “Build verify”安全策略检测向量detection vector与安全漏洞分离✅ 已验证SECURITY.md “What counts as what”安全策略检测向量走公开 issue “Detection vector” 模板✅ 已验证SECURITY.md安全策略真实漏洞走 GitHub private vulnerability reporting✅ 已验证SECURITY.mdAI 上下文AGENTS.md提供paste-anywhere完整 setup 上下文给 AI Agent✅ 已验证文件存在 README 引用AI 上下文llms.txtLLM-friendly 项目摘要✅ 已验证文件存在同类对比Stock Playwright / puppeteer-extra-stealth / undetected-chromedriver / Camoufox / CloakBrowser 五方对比表✅ 已验证README “How Fortress compares”同类对比Camoufox 是 Firefox fork约 3% 流量Fortress 是 Chromium fork主流 Chrome/V8 身份✅ 已验证README FAQ同类对比CloakBrowser 仍闭源最新主版本 paywalled✅ 已验证README 对比表上游经验fingerprint-chromium/ChromiumFish等先前 Chromium fork 经验✅ 已验证README 致谢行为指纹FP-Agent 论文arXiv 2605.01247✅ 已验证arXiv 直接访问确认行为指纹FP-Agent 结论浏览器指纹在多 Agent 共用时区分力有限行为指纹typing / scrolling / mouse更有区分度✅ 已验证论文摘要行为指纹FP-Agent 检测全部 7 个 AI browsing agentsCloudflare 仅检测 1 个✅ 已验证论文摘要 case study行为指纹FP-Agent 作者 Ethan Wang / Zubair Shafiq / Yash Vekaria提交 2026/5/2✅ 已验证arXiv 元数据Web 安全Mind the Web 论文arXiv 2506.07153✅ 已验证arXiv 直接访问确认Web 安全Mind the Web 结论Task-aligned injection 攻击 ASR 80%对带安全机制的 Agent 仍有效✅ 已验证论文摘要Web 安全Mind the Web 作者 Avishag Shapira / Parth Atulbhai Gandhi / Edan Habler / Asaf Shabtaiv1 2025/6/8v2 2025/10/20✅ 已验证arXiv 元数据CloudflareBot Management / JavaScript Detections 文档存在并说明 headless browsers / malicious fingerprints 识别机制✅ 已验证developers.cloudflare.com/bots局限Fortress 不能解决行为识别✅ 已验证README “Troubleshooting” 第七节原文局限Fortress 不能解决账号与业务风控账号年龄、频率、支付、设备绑定、IP 信誉✅ 已验证README troubleshooting局限仍被 Cloudflare / DataDome / Kasada 拦截 ≈ 90% 概率是 IPdatacenter不是 fingerprint✅ 已验证README “Troubleshooting” AGENTS.md RULES 4局限linux/arm64与 macOS.app/ 代码签名安装包仍待完成✅ 已验证README roadmapAkamai 案例README 展示 aa.com / lowes.com / macys.com / kohls.com 同 residential IP 下从 blocked → cleared⚠️ 项目方截图与第三方独立基准不同仅供 README 视觉佐证GitHub starsREADME 引用star-history.png具体当前 star 数未在搜索结果中独立验证⚠️ 项目方声明链接可用但未独立核对当前数值过去一年浏览器 Agent 的叙事明显加速。Browser Use、Stagehand、Playwright Agent、Crawl4AI 这类工具把浏览器变成了 Agent 的执行器让 AI 打开网页、点击按钮、填写表单、提取数据甚至跨站完成一个真实业务流程。但一旦 Agent 真正进入网页世界它面对的就不只是 DOM、按钮和表单。真实互联网里还有反爬、风控、验证码、行为识别、浏览器指纹检测、账号信誉、IP 质量和安全策略。Fortress 就是在这个背景下出现的一个项目。它的 GitHub 仓库是tiliondev/fortress项目定位很直接一个 stealth Chromium engine目标是让 scraper 和 browser agent 不容易因为自动化浏览器特征而被拦截。它在 2026 年 7 月 4 日出现在 Hacker News 的 Show HN 页面标题是Fortress - open-source Chromium that keeps browser agents unblocked。HN 页面热度不算高但它代表的方向值得关注浏览器 Agent 的竞争正在从模型会不会操作网页进入浏览器执行环境能不能进入网页。这篇文章不把 Fortress 当成绕过所有检测的神器而把它当成一个信号Agent stack 正在继续下沉。模型、框架、浏览器控制层之外浏览器内核、网络身份和风险边界都会成为基础设施的一部分。一、Fortress 到底是什么Fortress 不是一个新的爬虫框架也不是一个 Puppeteer 插件。它更底层它是一个 Chromium fork。传统自动化方案通常是 Playwright、Puppeteer、Selenium 启动一个浏览器再通过脚本层去隐藏自动化痕迹。例如改navigator.webdriver改 WebGL vendor改 user agent补 plugins、languages、permissions 等接口或者在页面加载前注入 stealth 脚本。Fortress 的思路不同。它不主要在页面 JavaScript 层打补丁而是在 Chromium 的 C 层修改浏览器指纹表面。按照项目 README 的说法它会在 Chromium 内部修正 canvas、WebGL、audio、fonts、navigator 等多个浏览器指纹表面使页面看到的结果更像普通 Chrome而不是一个被自动化框架控制的浏览器。它同时暴露 CDP endpoint因此现有 Playwright、Puppeteer 或任何 CDP 客户端可以继续连接只是底层浏览器换成 Fortress。这就是它所谓一行代码替换的含义不是重写 Agent不是重写爬虫流程而是把原来的浏览器内核替换成一个经过指纹一致性处理的 Chromium。二、为什么不能只靠 JS stealth 插件Fortress 的核心判断是JS 层伪装会自我暴露。很多 stealth 插件会在页面加载前注入脚本重写某些浏览器对象。早期反自动化检测比较粗糙只要把几个显眼字段补掉就能明显降低暴露概率。例如navigator.webdriver不要是 trueWebGL renderer 不要露出 Headlessplugins 和 languages 不要空得太奇怪。但反 bot 脚本也在演进。它们不只看字段值是什么还会看这个字段值是怎么来的。一个典型问题是原生 getter 与注入函数的差异。原生浏览器 API 的toString()往往表现为 native code而 JS 注入改写的 getter 可能暴露脚本实现、属性描述符差异或跨 realm 不一致。更麻烦的是 iframe、worker、不同 execution realm 之间可以重新获取相对干净的原型方法绕过主页面注入补丁。所以 Fortress 的判断不是还有哪个字段没补好而是补丁层本身会成为检测对象。如果 stealth 逻辑停留在页面 JS 层它就天然站在网站脚本可以观察和反推的位置。Fortress 选择把伪装位置下沉到浏览器引擎内部。它让 getter 本身来自 C让 main frame、iframe、Web Worker 等不同环境里的返回更一致也让页面脚本更难通过toString()或跨 realm 对比发现补丁痕迹。这背后的判断很关键反检测不再是改几个字段而是让整个浏览器故事自洽。三、现代网站到底怎么识别 Agent浏览器 Agent 被拦截大体有三层原因。第一层是自动化驱动痕迹。比如 ChromeDriver 特征、WebDriver 协议暴露、自动化变量、异常启动参数、Headless 行为差异。这类问题过去主要出现在 Selenium、早期 Headless Chrome 和不干净的自动化框架里。第二层是浏览器指纹。网站会通过 JavaScript 读取 canvas、WebGL、AudioContext、字体、屏幕、时区、语言、硬件并发数、device memory、Client Hints 等信息再判断这些信息是否像一个真实用户环境。Cloudflare 官方文档也提到其 JavaScript Detections 会识别 headless browsers 和 malicious fingerprints并在客户端执行轻量 JS 检测。第三层是网络和行为。TLS 指纹、HTTP headers、IP 类型、代理质量、鼠标轨迹、滚动节奏、输入间隔、页面停留时间、点击路径都会进入判断。2026 年一篇关于 AI browsing agents 指纹识别的论文指出浏览器指纹在多个 Agent 共用相似浏览器时区分力有限但行为指纹更有区分度研究者在受控网站上收集浏览器和行为特征用于区分七类 AI browsing agents 与人类用户。Fortress 主要解决第二层也部分照顾第一层。它不能解决所有问题。项目 README 里也强调如果仍然被 Cloudflare、DataDome、Kasada 等系统拦截很多时候问题可能是 IP而不是浏览器指纹如果检测继续演进也需要持续 rebase 和新增 patch。这点很重要。Fortress 不是万能通行证而是把浏览器指纹这一层做得更接近真实 Chrome。四、Fortress 的技术卖点Fortress 的卖点可以概括为五个。第一基于 Chromium而不是 Firefox。项目作者强调 Chrome/V8 是主流浏览器栈因此用 Chromium fork 做 Chrome 身份更容易保持整体一致性。相比 Firefox forkChromium 在 user agent、Client Hints、V8、Blink、TLS 形态等方面更适合伪装为主流 Chrome 流量。第二补丁在 C 层。README 称当前有 34 个 single-surface C patches覆盖多个指纹表面并放在patches/目录中用户可以审计和重建。第三CDP 接入。Fortress 暴露 raw CDP endpointPlaywright、Puppeteer、browser-use、Crawl4AI、Stagehand、LangChain Playwright toolkit 等都可以通过 CDP 接入。换句话说它不是替代上层 Agent 框架而是站在这些框架下面作为浏览器执行环境。第四指纹一致性。README 提到它会让 V8、Blink、BoringSSL、user-agent、JA3/JA4 TLS 形态尽量一致并默认提供一个 coherence-checked Windows identity。它也提供--uxr-*参数去覆盖 GPU、屏幕、时区、硬件、Client Hints 等表面。第五可验证。项目提供 gauntlet 测试声称可复现 CreepJS、Sannysoft、BrowserScan、rebrowser bot-detector、Cloudflare Turnstile 等检测结果。README 中列出的结果包括 CreepJS 0% headless、Sannysoft 0 failed、BrowserScan “No bots detected”、rebrowser 无Runtime.enableleak 等。这些说法仍然应该被视为项目方声明而不是独立第三方基准。它的价值在于项目把反检测能力变成可复现测试而不是只靠营销截图。五、它为什么和 Agent 有关而不只是和爬虫有关过去反检测浏览器主要服务于爬虫、广告验证、账号矩阵、价格监控、自动化测试等场景。但 Agent 出现后问题变了。传统爬虫通常目标明确打开 URL、解析 HTML、提取字段、翻页。Agent 的目标更接近真人操作搜索、登录、比较、填写、购买、提交、跨站执行流程。它不只是读取网页而是要在网页里行动。这让浏览器从采集工具变成执行环境。Agent 能力越强网站越有动机识别它。原因不只是反爬还有安全、风控、欺诈、滥用和资源保护。2025 年关于 Web-use agents 安全的研究指出这类 Agent 拥有多标签页导航、DOM 操作、JavaScript 执行、认证会话访问等高权限能力也会带来提示注入、越权操作、隐私泄露等攻击面。因此网站会越来越关心一个访问者到底是真人、普通自动化脚本还是具备行动能力的 AI Agent。Fortress 站在 Agent 开发者一侧试图让 Agent 不因为浏览器环境太机器人而被挡在门外。但从网站一侧看这也意味着检测系统会继续升级到行为层、账户层、任务意图层。这不是单向技术进步而是一场对抗。六、开源反检测浏览器的双刃剑Fortress 的开源属性很有意义。商业反检测浏览器长期存在但很多是闭源二进制用户无法知道它到底改了什么也无法确认有没有夹带风险。Fortress 把 patch series 放出来允许用户自己构建、审计和验证。README 也写明它采用 BSD-3-Clause补丁和工具链开放Chromium 与字体保留各自许可证。但这类工具天然有灰度。合法用途包括公开数据采集、自动化测试、可用性测试、研究测量、Agent 产品调试、浏览器指纹一致性研究。风险用途包括绕过网站风控、大规模爬取、账号滥用、垃圾注册、票务抢购、广告作弊、撞库辅助等。Fortress README 自己也强调它是用于合法自动化、测试和公开数据采集的浏览器工程项目使用者需要遵守目标网站 ToS 和所在司法辖区法律。这句话不是装饰。Agent 时代的浏览器自动化会变得更强边界也会更敏感。越是底层的反检测能力越需要明确用途边界。七、它的局限在哪里Fortress 目前至少有四个局限。第一它不能解决行为识别。Agent 的鼠标轨迹、滚动节奏、输入方式、任务路径、页面停留时间仍然可能和真人不同。FP-Agent 论文的核心结论就是行为指纹比浏览器指纹更能区分 AI browsing agents。第二它不能解决账号和业务风控。网站不只看浏览器还看账号年龄、登录地点、支付方式、历史行为、请求频率、设备绑定、IP 信誉。浏览器像真人不代表业务行为像真人。第三它需要持续维护。Chromium 版本、反 bot 脚本、Cloudflare、Akamai、DataDome、Kasada 的策略都会变化。Fortress README 也承认 detection keeps moving并计划 monthly Chromium rebase 和新的 gauntlet rows。第四它当前平台支持还不完整。README 显示 Linux x64 和 Windows x64 有 native binarymacOS 仍通过 Dockerlinux/arm64、macOS app、签名安装包等仍在路线图中。所以 Fortress 更像一个浏览器指纹层基础设施而不是完整的 Agent 反拦截系统。八、真正值得关注的趋势Fortress 的出现说明一个趋势Agent stack 正在分层。第一层是模型。GPT、Claude、Gemini、Qwen、GLM 等负责理解任务和生成动作。第二层是 Agent 框架。Browser Use、Stagehand、LangChain、Crawl4AI 等负责把自然语言任务转成浏览器动作、DOM 观察和结构化提取。第三层是浏览器控制层。Playwright、Puppeteer、CDP、browser harness 负责把动作落到浏览器里。第四层是浏览器执行环境。普通 Chromium、云浏览器、反检测浏览器、隔离浏览器、安全沙箱浏览器都会在这一层竞争。第五层是网络和身份层。代理、会话、账号、cookie、权限、风控策略决定一次自动化是否能稳定、合规、可控地完成。过去大家主要关注第一层和第二层认为模型足够强Agent 就能上网完成任务。Fortress 提醒我们真正落地时底层执行环境同样关键。Agent 不是在一个理想网页里工作而是在一个充满风控、反自动化、验证码和动态检测的真实互联网里工作。九、结论Fortress 不一定会成为最终赢家但它抓住了一个真实问题浏览器 Agent 的瓶颈不只是会不会点网页还有能不能以一个可信浏览器身份进入网页。它的技术路线是把 stealth 从 JS 注入层下沉到 Chromium C 层通过引擎级指纹一致性减少自动化暴露它的产品路线是保持 CDP 兼容让现有 Playwright、Puppeteer 和 Agent 框架可以直接接入它的开源路线是把 patch、build、gauntlet 公开让用户能审计和复现。但它也不会终结反 bot。网站检测会继续向行为层、账号层、网络层、任务意图层演进。未来的 Agent 浏览器不会只是更像真人浏览器还必须更安全、更可控、更合规并能清楚区分授权自动化和滥用自动化。Fortress 的意义不在于绕过了某个检测而在于它把一个新问题摆到了台面上当 AI Agent 开始真正使用互联网浏览器本身会成为 Agent 基础设施的一部分。错误速查卡症状根因定位修复pip install tilion-fortress安装后启动失败Docker 未启动 / 平台不支持 native binarypython -c from tilion_fortress import Fortress; Fortress().start()报错信息Linux x64 / Windows x64 直接 native其他平台先装 Docker再走tilion/fortress:latest镜像connect_over_cdp(http://localhost:9222)报 connection refusedFortress 未启动 / 端口被占用curl http://localhost:9222/json/version确认Fortress().start()成功执行或显式--remote-debugging-port9222仍被 Cloudflare 拦截通常是 datacenter IP不是 fingerprintcurl -v看来源 IP 段切换 residential / mobile 代理出口README 明确指出 ≈ 90% 的拦截源自 IP 而非 fingerprint仍被 DataDome / Kasada 拦截行为指纹 / 账号风控参考 FP-Agent 论文结论调整鼠标轨迹、滚动节奏、任务路径多账号隔离、设备绑定bot.sannysoft.com出现红行Persona 不一致或被识别为 headless看WebDriver Advanced与WebGL两行核对--uxr-*参数与本地 TLS / OS 故事是否一致避免navigator.webdrivertrueCreepJS 报 headless 比例不为 0单 surface 补丁被新检测向量盯上跑tools/gauntlet.py --bundle ./tilion-fortress提 issue 检测页面 → 下一个 patchRuntime.enable leak出现在 rebrowser bot-detectorCDP 客户端发了Runtime.enable看控制层 CDP 调用切 raw CDP不要 spawn chromedriverFortress README 三层检测框架明确这是 Layer B需要控制层协作creepjs报 “38% like headless”误读误以为 38% 是 headless 命中率GAUNTLET_RESULTS.md 解释那是 resemblance 模糊评分hard headless 标志仍是 0%macOS 上npm install tilion-fortress报错macOS native binary 仍在路线图README troubleshooting装 Docker Desktop或换 Linux x64 / Windows x64 走 nativelinux/arm64Apple Silicon 服务器 / ARM SBC启动失败镜像未发布docker run拉取失败临时用linux/amd64兼容--platform linux/amd64或跑 x64 emulator等 roadmapPersona 在/proc/pid/cmdline暴露单进程单 persona且 cmdline 可读tr \0 /proc/pid/cmdline当前版本每个 persona 启一个进程等 v2 MaskConfig runtime 上线IPC-delivered无 cmdline 痕迹升级 Chromium 主版本后 patches 部分失败上游 API 漂移build/apply-patches.sh报git apply失败用build/rebase-monthly.sh 152.0.XXXX.0三方合并失败 patch 提 issueWindows 149 channel 启动失败Windows native 仅支持 151SDK 默认 channel 是 stable (149)Fortress(channellatest).start()切到 151或走 Docker参考链接Fortress GitHubhttps://github.com/tiliondev/fortressHacker News Show HNhttps://news.ycombinator.com/item?id48781600Cloudflare Bot Scores / JavaScript Detectionshttps://developers.cloudflare.com/bots/concepts/bot-score/FP-Agent: Fingerprinting AI Browsing Agentshttps://arxiv.org/abs/2605.01247Mind the Web: The Security of Web Use Agentshttps://arxiv.org/abs/2506.07153Fortress Gauntlet Resultshttps://github.com/tiliondev/fortress/blob/main/docs/GAUNTLET_RESULTS.md