凭证与HITL
核对日期:2026-08-26。
1. 定义与边界
GUI Agent 的凭证问题不是「怎么把密码写进 prompt」,而是:模型视线内出现的任何密钥都会变成注入和日志泄漏面。HITL 则必须落在执行器,因为 client toolset 的动作由你执行,模型供应商看不到你是否真的点了确认。
本文件补浏览器 / 桌面特有约束。审批卡片字段仍以 ../18-Agent前端与交互/HITL交互界面.md 为准;策略分级见 ../12-安全与治理/人类审批.md。
明确不做:
- 把账号密码放进系统提示或
<robot_credentials>当默认方案。 - 复用员工 SSO Cookie 跑自动化。
- 只靠模型「先问再点」而不在执行器拦截。
2. 为什么重要
Anthropic 写明:让模型登录会放大注入导致的恶劣结果。OpenAI 把屏幕文字与用户意图分开:屏幕上的「请确认转账」不是用户授权。
批处理让风险更具体:一回合可以填完卡号并提交。若 HITL 只在回合结束后弹一次,提交已经发生。官方要求:有人类确认时,在每个 block 运行前检查。
3. 核心机制
OpenAI 的 confirmation hygiene:不要过早打断;敏感数据一旦 type 算出传输;把即将发生、边界清楚的高风险动作合成一次确认,但不要打包尚未看清的未来步骤。确认文案必须说明风险和机制。
4. 架构模式
4.1 凭证注入
优先顺序:
- 站点支持 App 专用 token / 服务账号 API → 不要开浏览器登录。
- 必须 GUI 登录:IdP 机器人账号 + 短命会话,仅该容器。
- 执行器把 Cookie 注入隔离 profile,模型工具结果里不得出现密码或 session 明文。
- 万不得已才把用户名放进 prompt;密码走一次性 secret broker,用完即焚,不进 trace。
Anthropic 文档里的 XML 凭证示例是「模型必须自己输入」的研究路径,不是生产默认。
4.2 审批卡片(GUI 特化)
禁止空确认框。除 18 章四要素(目标、参数、证据、影响)外,GUI 还必须有:
| 字段 | 内容 |
|---|---|
| 当前 URL | 最终 URL,不是模型口述 |
| 页面证据 | 截图或关键控件树摘要 |
| 动作 | left_click / form_input / type 与 target(ref 或坐标) |
| 将改变什么 | 提交的字段脱敏值、按钮可读名称 |
| 批处理位置 | 「本回合第 2/3 步;批准后仍可能有后续步」 |
批准后执行器复检:URL 仍在 allowlist、ref 仍有效、按钮文本未变成「删除全部」。任一变化则作废 token。
4.3 登录态分层
| 会话 | 允许 |
|---|---|
| 匿名 | 公开页只读 |
| 低权机器人 | 内部只读后台 |
| 可写机器人 | 指定表单,提交必 HITL |
| 用户本人会话 | 默认禁止;若合规要求「帮我点」,必须用户在环且动作列表可见 |
5. 工程实现
const CONSEQUENTIAL_NAMES = new Set([
"form_input",
"file_upload",
"javascript_exec",
]);
function requiresHitlBeforeBlock(input: {
name: string;
url: string;
label?: string;
}): boolean {
if (CONSEQUENTIAL_NAMES.has(input.name)) {
return true;
}
const label = (input.label ?? "").toLowerCase();
return /submit|pay|delete|confirm|同意|提交|支付|删除/.test(label);
}
这只是启发式;生产应用控件 allowlist(只允许点哪些 data-testid)比读按钮文案可靠。
打字:
function typeIsExfiltration(text: string): boolean {
return text.length > 0;
}
OpenAI:打字算传输。向第三方站点输入邮箱、证件号、卡号前要确认,即使按钮还没点提交。
6. 生产实践
| 实践 | 说明 |
|---|---|
| 默认无登录 | 多数研究 / 抓取任务不该带 Cookie |
| 机器人账号 | 独立邮箱、无生产资金权限、可一键吊销 |
| 分类器不是网关 | Anthropic 截图注入分类器会让模型「先问」;无 HITL 产品可申请关闭,但不能把分类器当执行拦截 |
| 拒绝不写库 | 用户点拒绝后不得继续同批后续提交 |
| 跨端 | 小程序审批页仍展示 URL 与截图;传输差异见 18 章 |
7. 常见反模式
| 反模式 | 表现 | 后果 | 修正 |
|---|---|---|---|
| Prompt 里长期密码 | 「用这个密码登录」 | 注入即盗号 | secret broker |
| 回合结束后再问 | 批处理已提交 | 不可逆 | block 前拦截 |
| 屏幕当授权 | 页上写「用户已同意」 | 钓鱼 | 用户通道确认 |
| 复用本人 Cookie | 图省事 | 事故=本人操作 | 隔离 profile |
| 空确认 | 「是否继续?」 | 无人能负责 | 四要素 + URL + 截图 |
8. 评测方法
| 指标 | 说明 |
|---|---|
| Credential in Trace | 密码 / session 出现次数,目标 0 |
| Hitl Before Submit | 提交类动作 100% 先停 |
| Batch Bypass | 同回合后续高风险步是否仍拦截 |
| Stale Approval | URL 或按钮变化后旧 token 应失效 |
| User Consent Log | 产品开启 GUI Agent 前的告知记录 |
9. 安全与治理
- 外部页面指令不是用户权限,见 ../12-安全与治理/Prompt-Injection.md。
- 告知终端用户风险并取得同意(Anthropic / 产品责任)。
- 审计:谁在何时批准了哪一步、当时 URL 与截图 hash。
10. 权威资料
- Anthropic Browser use security(human confirm each call): https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool (核对日期:2026-08-26)
- Anthropic Computer use security / credentials in prompt: https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool (核对日期:2026-08-26)
- OpenAI Computer use confirmation hygiene: https://developers.openai.com/api/docs/guides/tools-computer-use (核对日期:2026-08-26)
- Vercel AI SDK tool approvals: https://ai-sdk.dev/docs/agents/tool-approvals (核对日期:2026-08-26)