两扇门 — 不可信输入与访问控制
这一章讲三件事: 第一扇门的规矩(门外的一切都是不可信输入); 第二扇门的规矩(验证过身份之后,还要显式授权才能动手); 以及两扇门之间的关键构件——信任边界与中间件。 读完你能回答:prompt 注入到底「新」在哪?权限为什么老出事?
1. 这一章讲什么
原书「传统安全理论」的前两节讲的都是系统入口上的事:
- 不可信输入:门外递进来的每一样东西,都可能被恶意构造;
- 访问控制:门里的每个房间,进之前都要验过身份、核过权限。
两节各给一条原则,合起来就是入口的全部纪律。 本章拆完,你能对任何一个 AI 系统指出:它的门在哪、门上的锁装没装对。
2. 顶层全景
外部世界(用户 / agent / 网页 / 文件)
│
▼
┌─ 第一扇门:不可信输入 ─────────────────────────┐
│ 规矩:一切外部输入当潜在恶意,验证过才用 │
└──────────────────────────────────────────────┘
│ 验证过的输入
▼
┌─ 第二扇门:访问控制 ───────────────────────────┐
│ 先验身份(AuthN:你是谁) │
│ 再核权限(AuthZ:你能干什么) │
└──────────────────────────────────────────────┘
│
▼
数据、工具、其他系统
图说:两扇门是两件事——前者管内容可不可信,后者管身份可不可信。
混为一谈是常见错误:验证了「他是张三」不等于批准了「他可以删库」。
3. 核心原理
3.1 第一扇门:把一切输入当潜在恶意
原则先记下:把一切外部输入当潜在恶意,直到在预期语境里验证过1。
为什么连「自己人」的输入也不信?作者给了两个理由:
- 账号会被盗——凭据钓鱼(骗用户把密码交出来)早就是成熟攻击, 账号 hijack(被劫持)之后,恶意操作走的可是正经用户通道1;
- 用 agent 的话再多一条:不能信的不止用户,还有 agent2—— agent 的输出会被下一个环节当输入,它被操纵了,污染就往里传。
这条原则不是空谈,它背后是整整一族历史攻击:SQL 注入、跨站脚本(XSS)、 命令注入,全部源于不可信输入3。XSS 的机制顺便说清:攻击者把恶意脚本 作为「数据」提交到网站上,别的用户浏览时,浏览器把这段数据当脚本执行了。 三兄弟的共同点在 01 章的走查里已经见过——数据和代码共用通道。