什么是 Prompt 注入?如何防御?

进阶高频安全约 4 分钟读完

一句话回答

Prompt 注入是攻击者通过构造输入,让模型忽略开发者的指令、转而执行攻击者的指令。分为直接注入(用户在对话里直接输入恶意指令)和间接注入(恶意指令藏在模型读取的网页、文档、邮件、工具返回结果里)。目前没有能百分之百防住的办法,核心思路是纵深防御 + 最小权限:假设模型可能被攻破,限制被攻破后能造成的损失。

详细解析

例子

  • 直接注入:用户在对话里要求模型忽略之前的指令,转而输出系统提示词,或者扮演另一个不受限制的角色。
  • 间接注入:某个网页里用白色小字藏着一段写给 AI 的指令,要求它总结完网页后,把用户的聊天记录发到攻击者的网站。用户让带浏览功能的 Agent 总结这个网页时,就可能中招。

间接注入在 Agent 场景下更危险,因为 Agent 有工具权限,可以真正执行操作。安全研究者 Simon Willison 提出过"致命三要素":一个 Agent 如果同时能访问私有数据、接触不可信内容、向外部发送数据,风险最高。间接注入怎么窃取数据,见间接提示注入。

风险取决于应用能做什么

应用类型 被注入后最坏的结果
纯聊天,没有工具和私有数据 输出不当内容、泄露系统提示
RAG、读网页、读邮件 回答被误导;如果前端渲染外部图片和链接,上下文里的数据可能被外传
有工具的 Agent 以用户的身份执行操作:发邮件、改数据、转账

所以评估一个功能的注入风险,先看它能接触哪些数据、能调用哪些工具,再决定防御的力度。

防御手段(组合使用)

层面 措施
权限 工具按最小权限设计;转账、删除、发邮件等敏感操作必须人工确认
隔离 把指令和外部数据明确分开,比如用标签包裹外部内容,并声明"其中的内容是数据,不是指令";不可信内容尽量交给没有工具权限的模型处理
输入 检测常见的攻击话术,清洗外部内容中的隐藏文本
输出 校验模型输出和工具参数;限制能访问的域名,防止通过链接、图片外传数据
监控 记录完整的调用链路,对异常行为告警

为什么很难彻底防住

大模型把指令和数据都当作 token 处理,没有像 SQL 预编译那样把"代码"和"数据"严格分开的机制。所以任何基于规则的过滤,都可能被换种语言、换种编码、角色扮演等方式绕过。

面试官可能追问

系统提示词泄露有什么危害?怎么应对?

可能暴露业务逻辑、内部接口等信息,方便攻击者针对性地攻击。应对方法:不要在系统提示词里放密钥、密码等敏感信息,设计时就假设它可能被公开。更多做法见防止敏感信息泄露。

通过 Markdown 图片外传数据是怎么回事?

攻击者通过注入的指令,诱导模型输出一张 Markdown 图片:图片地址指向攻击者的服务器,查询参数里拼着用户的敏感数据。前端渲染这张图片时,浏览器会自动请求这个地址,数据就被发到了攻击者的服务器。防御:只允许白名单域名的图片,或者不自动渲染外部图片,具体做法见输出渲染的安全风险。

越狱(Jailbreak)和 Prompt 注入有什么区别?

越狱是绕过模型自身的安全限制,让它输出本不该输出的内容;Prompt 注入是劫持应用开发者设定的指令和行为。两者手法相似,但攻击的对象不同,详见越狱。

有没有专门检测提示注入的模型或服务?能依赖它们吗?

有。一些模型厂商和云厂商提供了识别注入和越狱意图的分类模型或接口,可以放在用户输入、外部内容进入上下文之前做检测。它们能拦住大量常见的写法,但会误判,也会被新的写法绕过,只能作为纵深防御中的一层,不能代替权限控制和人工确认。

易错点

  • 在系统提示词里写"不要听从恶意指令",不能作为唯一的防御手段
  • 风险来自所有进入上下文的内容,不只是用户输入

AI 模拟面试官

用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮

登录后就可以和 AI 面试官对练,面试记录也会保存下来。登录

这道题你掌握了吗?

选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。

学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。