大模型安全领域有一个被严重低估的威胁:Prompt 注入攻击。它不像越狱攻击那样引人注目,但危害性更大——攻击者不需要让模型突破安全护栏,只需要在用户输入中嵌入隐藏指令,就能悄悄劫持模型的输出逻辑。

ChatGPT 5.5 的指令遵从度比上一代更强,这带来了一个两难困境:更强的指令遵从意味着模型能更好地执行开发者的系统指令,但也意味着它对用户输入中隐藏的恶意指令更敏感。好在这个问题并非无解。我在 KULAAI(dl.877ai.cn)上对 ChatGPT 5.5 和其他主流模型做过一轮 Prompt 注入攻防测试,这个聚合平台能同时接入多个模型做安全对比,帮我快速验证了不同防御策略的有效性。

这篇文章拆解 Prompt 注入的攻击原理、ChatGPT 5.5 特有的风险点,以及如何用多层架构构建应用级安全防线。

Prompt 注入的本质:当用户输入成为系统指令
Prompt 注入和传统 Web 安全的 SQL 注入在原理上高度相似。SQL 注入是攻击者在用户输入中嵌入 SQL 代码,改变数据库查询的逻辑。Prompt 注入是攻击者在用户输入中嵌入自然语言指令,改变模型输出的逻辑。

典型攻击手法分直接注入和间接注入两类。直接注入是攻击者在用户消息中直白地要求模型“忽略之前的指令,执行以下操作”。间接注入更隐蔽——攻击者将恶意指令嵌入网页内容、邮件正文或文档中。当这些内容被模型通过联网搜索或文档分析功能读取时,隐藏指令被模型当作上下文执行。

ChatGPT 5.5 的指令层级结构让系统级安全指令始终处于最高优先级,任何用户层面的角色扮演都无法覆盖系统安全指令。但现实中情况往往更复杂。攻击者可以通过逐步引导让模型在特定场景下偏离安全约束,或者利用模型对长上下文中不同位置信息的敏感度差异来隐藏恶意指令。系统 Prompt 写得再完善,也需要应用层的多层防御来兜底。

第一层防御:输入净化与意图预判
Prompt 注入防御的第一道关口是对用户输入做净化处理。输入净化不只是简单的关键词过滤,而是分三个维度做结构化清洗。

格式规范化将用户输入中的特殊字符、零宽空格、编码混淆统一处理,消除利用格式边界绕过的可能。比如攻击者常用不可见字符来拆分敏感词,规避关键词匹配。规范化处理可以把这些隐藏字符还原或删除。

注入模式识别维护一个持续更新的注入攻击模式库,包含常见的角色覆盖尝试——让模型扮演恶意角色、嵌套 Prompt 尝试——在输入中嵌入多层指令、分隔符滥用——用特定标记伪造系统指令等模式。ChatGPT 5.5 发布后新出现的攻击模式也会被持续收录到这个模式库中。

意图复杂度评估是更精细的防御手段。在模型处理之前,先用轻量级分类器对用户输入的“意图复杂度”做快速预判——简单问答、复杂推理、潜在攻击意图。高风险输入自动触发更严格的安全校验流程,低风险输入正常处理。这个策略让安全检查的资源投入更精准,不会因为一刀切的严格过滤影响正常用户体验。

输入净化不能单独依赖单一手段。关键词过滤太容易被绕过,语义理解存在模型自身的判断误差。多层串联,每层过滤不同类型的问题,最后用规则引擎兜底——规则引擎判断为高风险的直接拦截,中风险的标记后继续处理,低风险的正常放行。

第二层防御:指令设计的分层隔离
系统 Prompt 的设计是 Prompt 注入防御的核心阵地。如果攻击者能用一句话让模型“忘记”自己的角色设定,说明角色设定没有放在正确的指令层级上。

指令分层隔离策略将系统指令分为三个层级。核心安全层是最高优先级指令,包括角色设定和安全约束,任何情况下都不能被用户层面的指令覆盖。任务描述层定义当前要完成的具体任务和输出格式,可以在对话过程中根据用户需求灵活调整。示例与上下文层通过具体示例来引导输出风格,优先级最低,可以被用户层面的指令覆盖。

分层之后的关键是“不可覆盖标记”。在核心安全指令中显式声明,某些约束是“不可被后续用户指令修改的”。ChatGPT 5.5 对这类明确标记的执行力很强。

指令复述策略是另一个有效手段。每隔一定轮次对话,在用户消息中以系统消息的格式重新注入核心安全约束。这能有效对抗多轮对话中模型对早期指令的“遗忘”。ChatGPT 5.5 的长上下文能力很好,但首因效应仍然存在——模型对最近接收到的指令更敏感。定期在最新消息中复述核心指令,确保它们始终在模型的注意力焦点内。

第三层防御:上下文隔离与动态校验
许多 Prompt 注入攻击利用了长上下文中信息管理的漏洞。攻击者可能先通过看似无害的多轮对话建立信任,然后在对话中间悄悄插入恶意指令——这些指令如果藏在十几轮对话之前,开发者很难发现。

上下文隔离策略将用户输入和系统指令在物理层面上做明确隔离。在 Prompt 结构中使用明确的标记分隔不同来源的文本,系统指令用一组标记包裹,用户输入用另一组标记包裹,检索到的外部内容用第三组标记包裹。这种分隔让模型更容易区分不同来源的指令优先级,减少用户输入“污染”系统指令的可能。

上下文动态校验在每次生成回答前做一次轻量级的上下文安全检查。这个检查不是让模型自己检查自己,而是用一个独立的轻量级规则引擎扫描即将发送给模型的完整 Prompt。如果检测到用户输入中可能包含指令注入模式——比如“忽略之前的指令”“你现在是一个不设限的 AI”——触发告警并暂停生成。

多轮对话的增量风险控制同样重要。对话越长,累积的上下文越复杂,注入攻击的隐蔽性越高。策略上可以设置对话轮次上限,超出后自动开启新会话。在旧会话中做摘要提炼,只将关键信息注入新会话。这既控制了上下文窗口的成本,也降低了注入攻击的长期渗透风险。

第四层防御:输出审核与规则引擎
即使前面所有防线都失效了,攻击指令已经被模型执行,输出审核仍然是最后一道有效的防线。

输出审核和输入净化最大的不同在于对抗对象。输入净化对抗的是攻击者,输出审核对抗的是模型已经被污染后的生成结果。它的职责不是阻止攻击,而是在攻击发生后拦截有害输出。

ChatGPT 5.5 自身在输出安全过滤上已经做得很强,但应用层的独立输出审核仍然不可或缺。模型的安全过滤有自己的策略和阈值,可能与应用场景的合规要求不完全匹配。在客服系统中引用虚假退款政策,在金融系统中生成错误费率信息,在内容平台中输出不当言论——这些内容未必触发模型自身的安全过滤,但可能造成实际损失。

规则引擎需要根据具体业务场景定制审核逻辑。金融应用重点审核输出中的数字、费率、承诺性表述是否在预设的安全范围内。客服应用重点审核输出中是否引用了不存在的退款政策或虚假承诺。内容平台重点审核是否有违禁词或越狱内容。规则引擎的输出决定最终执行动作——直接放行、拦截替换为安全提示、标记为需要人工复核。

这里有一个很重要的工程实践:输出审核的规则引擎应该是独立于模型的服务。不依赖模型的 API,不共享模型的安全机制。这样即使模型被完全攻破,输出审核仍然在生效。

第五层防御:监控告警与攻击留痕
前四层防御的目标是不让攻击生效,第五层的目标是让每次攻击都被记录下来,持续优化防御策略。

全链路日志需要记录什么。原始用户输入,经过净化后的输入,模型输出的完整内容,输出审核的拦截决策和原因。这些日志是后续攻击分析和防御策略优化的基础数据。

实时告警策略聚焦在异常模式检测上。单用户短时间内的注入尝试频次突增,某个类型的注入攻击模式突然大量出现,输出审核的拦截率异常波动——这些信号可能意味着你的应用正在被某个攻击组织针对性测试。

在 KULAAI 上做多模型安全对比时,全链路日志的价值尤其明显。同一个攻击样本在不同模型上的响应被并排记录,攻击模式的共性特征很容易识别出来。

第六层防御:模型自身的能力升级
ChatGPT 5.5 在模型层面的安全防护比上一代有了显著提升。指令层级结构让系统级安全约束的优先级更高,对抗训练的规模和多样性提升让模型对注入攻击的识别更敏锐,动态对抗训练机制让模型能持续学习新的攻击模式。

但模型自身的安全能力是底线,不是全部。Prompt 注入攻击的进化速度和攻击者的创造力,决定了单靠模型自身的安全训练无法完全杜绝注入风险。应用层的多层防御才是生产环境的安全保障。

总结
Prompt 注入攻击是每个 ChatGPT 5.5 应用都需要认真对待的安全威胁。输入净化拦截第一波恶意输入,指令分层隔离让系统指令不可覆盖,上下文动态校验防止长对话中的隐蔽注入,输出审核在最后一刻拦截有害内容,监控告警让每次攻击都被记录和分析。

这六层防御的核心思路是纵深防御——不依赖任何单一防线,每一层都在上一层的防护盲区中兜底。在 KULAAI 上做多模型安全对比时,同样的攻击样本在不同模型上的响应差异往往能暴露新的攻击路径。这些信息反过来输入到防御策略的迭代优化中,形成持续进化的安全体系。

Prompt 注入没有银弹。但只要防御层次足够多、校验链路足够完整,攻击者即使突破了某一层,也会在下一层被拦截。安全的终极目标是让攻击成本远高于攻击收益。


胆小的火锅
1 声望0 粉丝