提示词注入攻击的防御实操技巧

我最近在玩 AI Agent 的时候,深深体会到提示词注入简直是“隐形炸弹”。一次我让模型帮忙写邮件,结果它居然把我在系统提示里写的内部指令泄露出来,吓得我立马去翻资料,才发现这类攻击根本不是偶然,而是设计不严导致的。于是我把自己的防御经验整理成了几条实操技巧,想和同样爱折腾的你们分享。

1. 把系统提示和用户提示彻底分离

我会先把所有安全指令写在一个固定的 “系统提示” 里,然后在每次调用时把它们作为模型的前置上下文,绝不让用户的输入直接拼接进去。这样即使用户输入里藏了恶意指令,也很难覆盖系统提示的权威性。

2. 使用明确的指令边界符

在实际交互中,我给每段内容加上 <<<SYSTEM>>><<<USER>>> 之类的标签,模型在生成回复时只会读取 <<<USER>>> 部分的内容。这样即便攻击者尝试在输入里加入类似系统指令的文字,模型也能识别出它们是普通文本,而不是要执行的指令。

3. 限制上下文长度与历史回溯

我把每次对话保留的上下文长度控制在几百个字符以内,尤其是对长上下文的多轮对话会主动截断早期的系统指令。这样可以防止攻击者通过累积大量无害文本,间接把系统指令“埋进去”。

4. 加入输出过滤层

生成完毕后,我会先跑一遍关键词过滤(比如 “执行”、“打开文件” 等敏感动词),再决定是否直接返回给用户。若检测到可疑内容,就返回一个通用的拒绝提示,同时记录日志供后续审计。

5. 持续监控与红队演练

我把模型上线后当成“安全测试场”,定期自己写几条恶意提示(比如把系统指令包装成普通问题),跑一遍看是否还能被绕过。每次发现漏洞,就立刻更新系统提示或加强过滤规则,形成一个闭环的防御循环。

6. 多模态输入的额外防护

如果模型还能接受图片或音频,我会在前置层先把这些非文本输入转成纯文本描述,再交给模型。这样可以避免攻击者在图片的元数据里埋入指令,从而触发模型的意外行为。

把这些小技巧落地后,我的 Agent 再也没有被“提示词注入”玩坏。虽然没有百分之百的绝对安全,但通过分层防御、严格边界和持续红队演练,风险已经被压得非常低。希望我的经验能帮你在自己的项目里也把这类隐蔽攻击挡在门外,省得像我一样被突如其来的“泄密”吓到。祝大家玩得开心、玩得安全!

参与讨论

0 条评论

延伸阅读