越狱是什么?和提示注入有什么区别?
一句话回答
越狱(Jailbreak)是用户自己想绕过模型的安全限制,让它输出本来会拒绝的内容,攻击者就是使用者本人。提示注入是攻击者劫持应用,让模型违背开发者的指令,受害者往往是正常使用产品的用户。越狱的常见手法有角色扮演、虚构场景、编码或拆分混淆、多轮逐步引导等。防御靠多层叠加:模型自身的安全对齐、应用侧的输入输出审核、收窄产品的使用范围,再加上对异常账号的监控和处置。
详细解析
两者的区别
| 越狱 | 提示注入 | |
|---|---|---|
| 谁在攻击 | 使用者本人 | 第三方攻击者(直接注入时也可能是使用者) |
| 攻击的对象 | 模型的安全对齐和内容策略 | 应用的指令、数据和权限 |
| 想得到什么 | 违规或有害的内容 | 让应用替攻击者做事:泄露数据、调用工具、篡改输出 |
| 谁受损 | 应用的运营方(合规和声誉风险),以及有害内容可能伤害到的人 | 被劫持的应用和它的用户 |
| 主要防线 | 模型对齐、内容审核、账号处置 | 最小权限、隔离不可信内容、敏感操作确认 |
两个词经常被混用,手法也有交集:注入的内容里常常带着越狱技巧。OWASP 的 2025 版大模型风险清单就把越狱看作提示注入的一种形式。面试时抓住"谁在攻击、谁受损"这条线就能讲清楚。提示注入的防御见提示注入。
常见越狱手法(只讲类别)
- 角色扮演:让模型扮演一个"没有限制"的角色,用角色设定压过安全策略
- 虚构场景:把请求包装成小说情节、研究课题或假设性讨论,让有害内容看起来有正当理由
- 编码或拆分混淆:用编码、小语种、谐音、拆字,或者把敏感请求拆成几个看似无害的小问题,绕过关键词过滤和模型的识别
- 多轮逐步引导:从无害的话题开始,每轮只往前推进一点,借对话历史让模型一步步越过界限
- 大量示例:在长上下文里塞入大量虚构的问答示例,利用模型模仿上下文的倾向
- 自动化搜索:用算法自动搜索能让模型服从的输入,比如看起来像乱码的后缀
这些手法说明一件事:攻击者的表达方式是无穷的,任何基于"识别攻击写法"的单层防御都会被绕过。
多层防御
用户输入 → ① 输入检测 → ② 模型(安全对齐 + 收窄范围的系统提示)→ ③ 输出审核 → 用户
↘ ↙
④ 记录命中情况,按账号累计风险,逐级处置
- 模型安全对齐:由模型厂商在训练中完成。应用开发者能做的是选择安全能力可靠的模型,换模型或模型升级后重新测试
- 收窄产品范围:客服机器人只回答业务相关的问题,无关请求直接拒绝。攻击面变小了,也能避免应用被当成免费的通用模型
- 输入检测:用分类模型识别越狱意图。要看最近几轮对话,而不只看最后一句,才能发现多轮引导
- 输出审核:最关键的一层。越狱的写法千变万化,但有害输出的类别相对固定,在输出侧拦截更稳定。实现细节见内容安全审核
- 监控和处置:反复触发拦截的账号逐级处理(提示、限流、人工复核、封禁),并保留记录
代码示例
moderate() 代表审核接口或分类模型,各家接口不同,这里写成通用函数:
async function guardedChat(user, messages) {
// 检测最近几轮,而不只是最后一句,应对多轮逐步引导
const inputCheck = await moderate(formatTurns(messages.slice(-6)))
if (inputCheck.flagged) return refuse(user, inputCheck)
const reply = await llm.chat({ system: SYSTEM_PROMPT, messages })
// 越狱一旦成功,输出审核是最后一道关
const outputCheck = await moderate(reply.content)
if (outputCheck.flagged) return refuse(user, outputCheck)
return reply.content
}
async function refuse(user, check) {
await auditLog.write({ userId: user.id, categories: check.categories })
// 24 小时内累计触发次数,达到阈值时交给人工复核
const key = `jailbreak:strikes:${user.id}`
const strikes = await redis.incr(key)
if (strikes === 1) await redis.expire(key, 86_400)
if (strikes === 5) await reviewQueue.add({ userId: user.id }) // 只在刚达到阈值时入队一次
return '这个问题我没法帮你回答。'
}
面试官可能追问
模型厂商已经做了安全对齐,应用还需要自己防吗?
需要。对齐是概率性的,新的越狱手法不断出现,模型更新后表现也可能变化。应用对自己的产品负有合规责任,而且产品的边界通常比通用模型更窄,比如面向未成年人的产品要求更严格。把对齐当作第一层,应用侧的审核和监控才是自己能掌控的部分。
输入检测和输出审核只能做一个的话,选哪个?
选输出审核。它不关心用户用了什么手法,只看最终内容是否违规,越狱即使成功了,有害内容也还要过这一关。输入检测的价值在于提前拦截、节省模型调用,并给账号的风险累计提供依据。流式输出时,输出审核要边生成边做。
用户说"我是安全研究员,只是做测试",怎么区分正当需求和越狱?
对话里的身份声明无法验证,所以策略要按内容类别定,而不是按用户自称的目的定。确实有专业需求的用户(如安全团队、医疗机构),通过线下认证、签订协议的专门渠道提供更宽松的策略,而不是让模型在对话里判断对方是谁。
怎么发现新的越狱手法?
分析拦截日志和人工复核的样本,处理用户举报,定期做红队测试,关注安全社区公开的研究。发现的新样本加入安全评测集,每次换模型、改 Prompt 都跑一遍回归,确认没有退化。
易错点
- 把越狱和提示注入完全等同,或者认为两者毫无关系:区别在于谁攻击、谁受损,手法上有交集
- 以为在系统提示里写"无论如何都不能……"就能防越狱,角色扮演和多轮引导正是用来绕过这类指令的
- 只检测最后一句输入,发现不了多轮逐步引导
AI 模拟面试官
用自己的话回答,AI 对照参考答案打分、指出遗漏,再追问,最多 3 轮
这道题你掌握了吗?
选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。
学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。