Skip to content

Prompt 注入的根因,是大模型分不清“指令”和“数据”。系统提示词、用户输入、网页内容、检索文档、工具返回结果,进入模型后都会被压平成同一段 Token 流。模型没有天然硬边界判断哪些必须服从、哪些只是待阅读素材。因此,单纯在提示词里加一句“不要听恶意指令”,无法真正解决问题。

更危险的是间接注入。攻击者可以把恶意指令藏在网页、知识库文档或工具返回结果里。模型读取这些外部内容后,可能把其中的伪装文字当成新指令执行。安全设计不能假设“模型一定不会被骗”,而要假设“模型迟早会被骗”,重点是让它即使被骗也造不成严重损失。

有效防御应采用四层纵深防御。

第一层是输入侧检测与隔离。系统提示词作为可信指令区,外部内容只作为不可信数据区,不能与系统提示词随意拼接。外部网页、文档、工具结果进入上下文前,应通过安全分类器或小模型扫描,识别隐藏指令、伪装系统消息、诱导越权文本等风险。但这只能挡住一部分攻击,无法保证全部拦截。

第二层是模型侧提升鲁棒性。模型训练阶段可以加入大量藏在网页和文档中的恶意指令样本,通过对抗训练和强化学习,让模型更容易识别并拒绝注入内容。这能降低被攻击成功的概率,但仍无法把成功率降为零。

第三层是执行侧控制爆炸半径,这是最关键的一层。Agent 的工具权限、数据访问和账号能力必须遵守最小权限原则,不给“万能钥匙”。高风险操作如转账、删库、发邮件、执行代码,应强制人工确认或放进沙箱。处理不可信外部内容的组件尽量只保留读权限;真正执行写操作的组件,最好与不可信内容隔离。

第四层是输出侧校验与可观测。系统要检查输出中是否夹带敏感信息、异常外链或格式逃逸,避免模型被诱导把密钥、日志等信息偷偷拼进 URL 或返回文本中。同时,完整记录外部内容来源、模型决策和工具调用链路。不可观测就不可控,事故发生后必须能追溯是哪份文档、哪个网页、哪个工具结果触发了异常行为。

Prompt 注入防御的目标不是追求“永不被攻破”,而是通过分层隔离、权限收敛和审计追踪,把攻击成本抬高,并把失败后的损失控制在可接受范围内。