AI 应用的安全问题,已经不只是“模型会不会胡说”。当模型能读文件、访问网页、调用工具、写数据库、发邮件或部署代码时,它就进入了真实权限系统。此时 prompt injection 不再是聊天里的恶作剧,而可能变成越权操作、数据泄露和供应链风险。
OWASP 在 LLM Top 10 中把 Prompt Injection 放在首位。OpenAI 的 guardrails 与 human review 文档也提醒,代理应用需要输入检查、输出检查、工具调用前后的约束和人工审批。把这些资料和社区安全讨论合在一起,可以得到一个朴素结论:AI 应用安全的核心是权限设计。
Prompt Injection 为什么难防
传统注入攻击通常发生在代码解释边界上:SQL、Shell、HTML、模板。Prompt injection 的麻烦在于,模型天然会把自然语言指令和自然语言数据放进同一个语义空间。网页、邮件、PDF、issue 评论、聊天记录,都可能包含“看起来像数据,实际上想改变行为”的文本。
OWASP 的 Prompt Injection Prevention Cheat Sheet把这类风险归纳为直接注入、间接注入、隐藏指令、多模态载荷等模式。对开发者来说,最重要的不是记住所有名字,而是承认一个前提:凡是来自用户、网页、文档或外部工具的内容,都应该被当作不可信输入。
不要试图用一句“忽略恶意提示词”解决 prompt injection。系统结构必须让恶意文本即使被读到,也拿不到不该有的权力。
危险组合:私有数据、不可信内容、外部通信
安全社区经常讨论的“lethal trifecta”可以理解为三个条件同时出现:
- 模型能访问私有数据,例如仓库、邮件、数据库、内部文档。
- 模型会读取不可信内容,例如网页、issue、用户上传文件。
- 模型能把信息发到外部,例如发邮件、写 GitHub issue、访问任意 URL。
这组条件一旦同时成立,攻击者就可能把恶意指令藏在不可信内容里,诱导代理读取私有数据并通过外部通道泄露。X 上关于 代理权限边界、AI 应用安全取舍的讨论,可以作为趋势信号:开发者越来越关心代理拿到真实权限后的边界。
把工具分成四级权限
一个实用的设计方法,是先给所有工具分级:
- 0 级:纯计算,没有外部输入输出,例如格式转换、摘要本地文本。
- 1 级:只读公开数据,例如搜索公开文档、读取公开网页。
- 2 级:只读私有数据,例如读取个人仓库、内部知识库、邮件。
- 3 级:有副作用,例如写文件、发消息、创建 issue、部署、支付。
级别越高,越需要更强的约束。2 级工具不能和任意外部通信工具自由组合;3 级工具需要明确确认、幂等键、审计日志和回滚路径。模型不应该拥有“看什么都行、发哪里都行、改什么都行”的混合权限。
Guardrails 要放在工具边界上
很多人把 guardrails 理解成输出审核:模型回答前检查一下有没有违规内容。对普通聊天这有意义,但对代理应用还不够。真正敏感的位置在工具边界:
- 调用前:检查这个用户是否有权使用该工具。
- 参数前:检查目标资源是否属于允许范围。
- 执行前:高风险动作需要人工确认或策略批准。
- 返回后:过滤私有数据,避免把工具结果直接暴露给模型或用户。
- 输出前:检查最终回答是否包含密钥、token、个人信息或内部路径。
OpenAI Agents SDK 的 Guardrails 文档提供了输入、输出和工具调用周围的约束思路。具体实现可以不同,但位置不能错:只在最后拦输出,往往已经太晚。
个人网站和小应用也要做最小权限
个人开发者常常觉得安全是大公司的事。但只要你的应用连接 GitHub、Cloudflare、邮箱、数据库或支付,风险就已经存在。最低成本的做法是:
- 静态站点优先:没有后端就没有后端权限泄露。
- 公开数据和私有数据分项目、分 token、分环境。
- 每个 token 只给当前任务所需权限,不用万能管理员 token。
- 所有写操作先生成草稿或计划,再由人确认。
- 不要让代理同时读取不可信网页、私有仓库和任意外发工具。
- 把日志当成产品功能:记录谁、何时、让模型调用了什么工具。
一个安全检查清单
输入来源:哪些内容是不可信的?
数据边界:模型能读取哪些私有数据?
工具边界:哪些工具会产生副作用?
外发边界:模型能把信息发送到哪里?
确认机制:高风险动作是否需要人工批准?
审计机制:失败后能否复盘工具调用链路?
这个清单不能覆盖所有风险,但它能防止最常见的结构性错误。安全不是让模型“更听话”,而是让系统在模型听错时仍然不至于越权。
资料来源
本文参考了 OWASP Top 10 for LLM Applications、OWASP Prompt Injection Prevention Cheat Sheet、OpenAI Guardrails and human review 与 Agents SDK Guardrails。X 链接仅作为安全社区讨论趋势,本文不复制原帖,也不把未经验证的传播数据当事实。