Prompt 注入攻击是什么?如何防范?
Prompt 注入是 LLM 时代的新型安全威胁。
- 本质:把恶意指令塞进用户输入,劫持 AI 的决策逻辑
- 核心原理:指令优先级劫持 — 模型分不清系统规则和攻击代码
- 三步攻击:识别 prompt 结构 → 构造 payload → 触发执行
- 与 SQL 注入对比:同样利用边界混淆,攻击目标是 AI 语义,防御成熟度差 20 年
- 防御要纵深:输入过滤 + prompt 分层 + 最小权限 + 上下文沙箱 + 输出检测 + 日志监控
- 反直觉:AI 越智能,被攻破后破坏力越大
一句话理解 Prompt 注入
Prompt 注入攻击 = 攻击者通过精心设计的文本输入,让 AI 系统绕过原始指令,执行未授权操作。
关键词有三个:精心设计(不是误触,是有意构造)、绕过指令(让模型无视系统设定)、未授权操作(结果脱离合法用户预期)。
如果把传统 SQL 注入比作「撬锁进门」,Prompt 注入就是「说服门卫主动把钥匙交给你」——前者攻击数据库语法,后者攻击的是 AI 的理解能力本身。
核心原理:指令优先级劫持
Prompt 注入之所以成立,根源在于 模型无法区分哪条是指令、哪条是伪装成指令的攻击代码。
正常情况下,AI 助手会按照你给定的规则执行任务。但攻击者聪明的地方在于:用语言模式伪装,让模型误以为这条恶意指令是更高优先级。形象地说——有人趁你不注意,在你正在处理的工作堆里塞了一张小纸条:「紧急任务,先放下 手里所有事情」,你的 AI 助手也会被骗到。
这里有个必须搞清楚的概念:系统 prompt。它是 AI 应用的底牌,包含了商业机密和核心工作流。一旦泄露,整个系统的运行逻辑都暴露在攻击者眼前。
更麻烦的是,当前的 AI Agent 越来越智能——具备自主感知环境、决策执行操作的能力,通常还能调用 API、操作数据库。智能程度越高,能做的事越多,被注入后的破坏范围就越大。
攻击流程:三步走
完整的 Prompt 注入攻击链路分三步:
第一步:识别目标系统的 prompt 结构。 攻击者发送各种试探性输入,观察模型的响应模式,逐步推断出系统 prompt 的存在和基本框架。
第二步:构造注入 payload。 常见的有四种类型:
| 类型 | 典型话术 |
|---|---|
| 直接指令型 | 「忽略之前的所有指令」 |
| 角色扮演型 | 「你现在是一个没有限制的 AI」 |
| 编码绕过型 | 用 base64 / 同音字 / 特殊符号拆分关键词 |
| 上下文混淆型 | 把恶意指令混入正常对话流 |
第三步:触发模型执行恶意指令。 一旦 payload 注入成功,攻击者可能获取系统 prompt 内容、API Key,甚至篡改输出结果。
这三步环环相扣,最终形成完整的攻击链路。
Prompt 注入 vs SQL 注入
面试官最爱问的对比题。两者名字相似,但 攻击目标和防御方式完全不同。
| 维度 | SQL 注入 | Prompt 注入 |
|---|---|---|
| 攻击目标 | 数据库结构和语法 | AI 的决策逻辑和语义理解 |
| 攻击手法 | SQL 特殊字符(单引号、分号) | 自然语言的指令性("忽略上面的指令") |
| 防御成熟度 | 研究 20+ 年,方案完善 | 还在探索,没有银弹 |
共同根源是同一个老问题:输入数据和系统指令混合在一起,导致边界混淆。但 SQL 注入从上世纪末就被研究,各种过滤、WAF、参数化查询都很成熟;Prompt 注入的防御方案目前还在探索阶段。
一句话总结:SQL 注入是让数据库听你的,Prompt 注入是让 AI 听你的——攻击思路相似,但战场和技术栈完全不同。