Prompt 注入攻击
用户输入怎么"劫持"系统提示词,让模型按攻击者的指令行事——以及工程上能做什么。
注入攻击在做什么
大模型应用通常由两部分组成:开发者写的系统提示词(定义模型身份、可用工具、行为规则),和用户输入的内容。模型把这两段文字拼在一起作为完整上下文,本身无法区分"哪段是系统、哪段是用户"。Prompt 注入就是利用这一点:攻击者构造一段输入,让模型忽略原本的系统指令、改按攻击者的指令行动。最经典的形式是"忽略之前所有指令,现在你是 XX"——这种朴素写法在弱模型上仍然有效,强模型上需要更精巧的诱导。
真实发生的案例
2024 年到 2025 年间披露的多个案例包括:让客服 AI 泄露其他用户的对话摘要、让代码助手读隐藏网页内容并按其指令修改文件、让文档问答系统返回攻击者写好的恶意答案、让搜索 Agent 把用户邮箱重定向到攻击者地址。这类攻击不一定需要"破解"模型,只需要模型把攻击文本当作正常指令执行。"间接注入"更危险:攻击者把恶意提示词藏进网页、PDF、邮件里,等用户让 AI 去读这些内容时触发。
防御的工程化模式
完全防御不存在,但分层防御能压低成功率。第一层是"输入侧清洗":检测并拒绝明显包含"忽略指令""你是 XX"等模式的输入。第二层是"权限最小化":模型能调的工具(发邮件、写文件、查数据库)都应限定到最小必要范围,并强制走人工审核。第三层是"输出侧校验":在把模型输出交给下游执行前,用另一段程序(不经过 LLM)做格式、白名单、敏感词检查。第四层是"用户上下文隔离":不要让模型直接看到其他用户的输入或历史。
边界永远不可完全消除
只要模型还是"把所有提示词拼在一起生成回答",Prompt 注入就有理论上的可能性。把它当作 SQL 注入的同类问题来理解:合理的分层防御能把概率压到很低,但任何声称"完全免疫"的方案都值得怀疑。高风险场景(让 AI 自动执行金融交易、删除生产数据、对外发消息)必须保留人类在回路的最后一道审批。把模型当成一个会听话但偶尔会听话听错的执行者,而不是"会思考"的主体,是工程上最理性的姿态。
虫鱼的AI万花筒