越狱是什么?和提示注入有什么区别?

进阶安全对比约 6 分钟读完

一句话回答

越狱(Jailbreak)是用户自己想绕过模型的安全限制,让它输出本来会拒绝的内容,攻击者就是使用者本人。提示注入是攻击者劫持应用,让模型违背开发者的指令,受害者往往是正常使用产品的用户。越狱的常见手法有角色扮演、虚构场景、编码或拆分混淆、多轮逐步引导等。防御靠多层叠加:模型自身的安全对齐、应用侧的输入输出审核、收窄产品的使用范围,再加上对异常账号的监控和处置。

详细解析

两者的区别

越狱 提示注入
谁在攻击 使用者本人 第三方攻击者(直接注入时也可能是使用者)
攻击的对象 模型的安全对齐和内容策略 应用的指令、数据和权限
想得到什么 违规或有害的内容 让应用替攻击者做事:泄露数据、调用工具、篡改输出
谁受损 应用的运营方(合规和声誉风险),以及有害内容可能伤害到的人 被劫持的应用和它的用户
主要防线 模型对齐、内容审核、账号处置 最小权限、隔离不可信内容、敏感操作确认

两个词经常被混用,手法也有交集:注入的内容里常常带着越狱技巧。OWASP 的 2025 版大模型风险清单就把越狱看作提示注入的一种形式。面试时抓住"谁在攻击、谁受损"这条线就能讲清楚。提示注入的防御见提示注入。

常见越狱手法(只讲类别)

  • 角色扮演:让模型扮演一个"没有限制"的角色,用角色设定压过安全策略
  • 虚构场景:把请求包装成小说情节、研究课题或假设性讨论,让有害内容看起来有正当理由
  • 编码或拆分混淆:用编码、小语种、谐音、拆字,或者把敏感请求拆成几个看似无害的小问题,绕过关键词过滤和模型的识别
  • 多轮逐步引导:从无害的话题开始,每轮只往前推进一点,借对话历史让模型一步步越过界限
  • 大量示例:在长上下文里塞入大量虚构的问答示例,利用模型模仿上下文的倾向
  • 自动化搜索:用算法自动搜索能让模型服从的输入,比如看起来像乱码的后缀

这些手法说明一件事:攻击者的表达方式是无穷的,任何基于"识别攻击写法"的单层防御都会被绕过。

多层防御

文本
用户输入 → ① 输入检测 → ② 模型(安全对齐 + 收窄范围的系统提示)→ ③ 输出审核 → 用户
                 ↘                                                ↙
                   ④ 记录命中情况,按账号累计风险,逐级处置
  1. 模型安全对齐:由模型厂商在训练中完成。应用开发者能做的是选择安全能力可靠的模型,换模型或模型升级后重新测试
  2. 收窄产品范围:客服机器人只回答业务相关的问题,无关请求直接拒绝。攻击面变小了,也能避免应用被当成免费的通用模型
  3. 输入检测:用分类模型识别越狱意图。要看最近几轮对话,而不只看最后一句,才能发现多轮引导
  4. 输出审核:最关键的一层。越狱的写法千变万化,但有害输出的类别相对固定,在输出侧拦截更稳定。实现细节见内容安全审核
  5. 监控和处置:反复触发拦截的账号逐级处理(提示、限流、人工复核、封禁),并保留记录

代码示例

moderate() 代表审核接口或分类模型,各家接口不同,这里写成通用函数:

JavaScript
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 轮

登录后就可以和 AI 面试官对练,面试记录也会保存下来。登录

这道题你掌握了吗?

选一个最接近的状态,没掌握的题会出现在"我的进度 · 待复习"里。

学习记录暂存在本机浏览器。登录后自动同步到账号,换设备也能看到。