浏览器安全 — 域名隔离与 Prompt-Injection 防御
学习目标
- 理解 Browser Use 在浏览器环境中的域名级沙箱设计
- 掌握敏感数据的安全注入和域名验证
- 了解弹窗自动关闭作为 prompt-injection 防御
前置知识
- 安全沙箱设计 — 纵深防御、内核沙箱、策略引擎
下文假设你已理解安全沙箱的通用原理,直接聚焦 Browser Use 在浏览器环境中的具体实现。
项目实践
域名级沙箱
在浏览器自动化场景中,沙箱的边界是域名而非进程。Browser Use 通过 BrowserProfile 的 allowed_domains 和 prohibited_domains 实现:
browser = BrowserSession( allowed_domains=["*.google.com", "github.com"], prohibited_domains=["malicious-site.com"],)域模式匹配:
- 精确匹配:
"github.com"仅匹配github.com - 通配符:
"*.google.com"匹配mail.google.com、docs.google.com等子域 - 协议无关:匹配时忽略
http:///https://
敏感数据域级注入
Agent 的 sensitive_data 参数支持域级凭据绑定:
agent = Agent( task="...", sensitive_data={ "github.com": {"username": "user", "password": "pass"}, "*.google.com": {"email": "user@gmail.com"}, },)安全验证:
- 凭据仅在
allowed_domains匹配的域上自动注入 - 当
sensitive_data包含域级凭据但allowed_domains未设置时,发出安全警告 - 当
sensitive_data中的域模式不在allowed_domains覆盖范围内时,发出具体警告
WARNING: ⚠️ Agent(sensitive_data=••••••••) was provided butBrowser(allowed_domains=[...]) is not locked down! ⚠️If the agent visits a malicious website and encounters aprompt-injection attack, your sensitive_data may be exposed!弹窗自动关闭
PopupsWatchdog 监听 JavaScript 对话框事件(alert()、confirm()、prompt()),自动关闭并记录消息:
Auto-closed JavaScript dialogs: - Enter your API key - Confirm deletion of your account被自动关闭的消息注入到 Agent 上下文中,让 Agent 知道发生了什么。
为什么这是 prompt-injection 防御的关键一环:
恶意网页可以通过 prompt("Enter your GitHub password") 诱导 Agent 输出凭据。弹窗自动关闭阻止了这种攻击向量。
安全 Watchdog 架构
SecurityWatchdog 是事件总线中的一个 watchdog 服务,监听导航事件并验证目标域:
问题与规避
子域匹配不精确
问题:"*.google.com" 匹配所有子域,包括可能不安全的第三方子域。
对策:
- 使用精确匹配而非通配符(如
"mail.google.com"而非"*.google.com") - 设置
prohibited_domains黑名单
凭据泄露 via Prompt-Injection
问题:即使有域名限制,攻击者仍可能通过视觉欺骗(如伪造登录页面)诱导 Agent。
对策:
- 弹窗自动关闭阻止了
prompt()窃取 - 域名白名单限制了 Agent 只能访问已知安全的域
- 建议配合 Browser Use Cloud 使用 stealth 浏览器,减少被检测风险
禁用域名限制时的安全警告被忽略
问题:设置了 sensitive_data 但忘记配置 allowed_domains。
对策:
- Browser Use 在初始化时发出醒目警告(黄色/红色终端输出)
- 日志级别为
warning而非debug
设计取舍
域名级 vs 页面级沙箱
| 方案 | 优势 | 代价 |
|---|---|---|
| 域名级(当前) | 实现简单、性能好 | 同一域内的不同页面可能有不同风险 |
| 页面级(URL 匹配) | 更精细控制 | 规则复杂、维护成本高 |
Browser Use 选择域名级是因为大多数安全场景以域为边界。
弹窗自动关闭 vs 转发给 Agent
| 方案 | 优势 | 代价 |
|---|---|---|
| 自动关闭 | 安全、简单 | 合法弹窗也被关闭 |
| 转发给 Agent | 灵活、可处理 | Agent 可能被欺骗 |
Browser Use 选择自动关闭是因为 prompt-injection 的安全风险大于关闭合法弹窗的不便。