Skip to main content

大模型应用的十类风险

OWASP 的 LLM Top 10 在 2026 年 8 月发布了新版本。这一版值得单独看一眼,不只是因为条目变了,而是因为排名的产生方式变了:2026 版采用混合评分——从业者投票占 75% 权重,来自公开漏洞库和 AI 危害数据库的 6,639 起真实事件占 25%。用项目方的说法,这是"拿社区经验去对撞数千起真实事故"。

这意味着榜单反映的不只是"大家担心什么",还有"实际出事的是什么"。两类信号不一致的地方,往往是判断失误的地方。

LLM01Prompt Injection严重LLM02敏感信息泄露高LLM03过度代理严重LLM04供应链高LLM05数据与模型投毒严重LLM06无限制消耗高LLM07误导信息高LLM08隐藏上下文暴露高LLM09向量与嵌入弱点中LLM10输出处理不当高2026 版三处变化过度代理升到 #3误导信息 #9 → #7系统提示词泄露 → 隐藏上下文暴露
图:OWASP LLM Top 10 2026 版十类风险

1. 2026 版的三处变化​

1.1 过度代理从 #6 升到 #3(LLM03)​

Excessive Agency 连升三位。它是这一版里变化最大的一条,原因也好理解:随着 Agent 和工具调用成为标配,"模型拥有比任务所需更多的能力或自主权"成了最常被真实事故验证的问题。

三根因被拆得很清楚:功能过多(能调的工具比需要的多)、权限过大(这些工具的权限比需要的宽)、自主性过高(不需要人确认就执行了)。

对应的做法在《护栏要做在基础设施层》里展开过,这里只强调一点:它不是提示词问题,是架构问题。

1.2 误导信息从 #9 升到 #7(LLM07)​

幻觉、编造引用、过期事实——以前被当成"质量问题",现在被正式列为安全风险。理由是它会让下游系统或用户基于错误内容采取行动。

对 RAG 系统来说这条尤其重要:检索做对了,模型仍可能读错上下文。所以《答案要能追溯到出处》里说的逐句溯源不是"锦上添花",它就是这一条的直接缓解措施。

1.3 系统提示词泄露被替换成隐藏上下文暴露(LLM08)​

旧版的 System Prompt Leakage 只保护系统提示词本身。新版换成 Hidden Context Exposure,覆盖面大得多——所有不直接面向用户的上下文都算攻击面:系统提示词、开发者指令、检索出来的策略文本、记忆、用户信息、应用状态、工具与函数的 schema。

这一条对 Agent 系统的影响比旧版大得多。工具 schema 泄露给攻击者,等于把可调用的能力清单和可构造的参数格式都交了出去。

2. 十类按你的系统结构分组​

按编号背意义不大,按"你的系统哪一段会中"来分更有用。

2.1 输入与输出边界​

LLM01 提示词注入(仍居首位)。分直接注入和间接注入:直接的是用户在输入框里塞指令;间接的是指令藏在邮件、PDF、网页、数据库记录、代码注释里,被模型当成内容读进来然后执行。

一个必须承认的事实:OpenAI 在 2025 年 12 月公开表示,提示词注入可能无法在架构层面被彻底解决。所以缓解手段只能是分层的——输入过滤、检索内容隔离、工具调用约束、输出校验——不能指望任何单点。

LLM07 误导信息:上面说过。

LLM10 输出处理不当:模型输出被下游系统(代码解释器、浏览器、SQL 引擎、编译器)直接使用而没有消毒。这条和 LLM01 是一体两面——注入是入口,输出处理不当是出口。生成的代码直接执行、生成的 HTML 直接渲染,都属于这一类。

2.2 数据与上下文​

LLM02 敏感信息泄露:模型在回答里吐出 PII、凭证、商业机密。路径包括记忆化(训练数据里记住的)、过度检索(检索到了不该进上下文的内容)、输出过滤不足。

第二项和《权限过滤要在检索前》直接相关:检索阶段的越权会在这里变成输出阶段的泄露。过滤做在前面,这一类的攻击面就小一大半。

LLM05 数据与模型投毒:训练数据、微调数据集、适配器、模型权重被污染。注意新版的范围——任何会写入权重的阶段都算,不只是预训练。用第三方 LoRA 适配器、用来源不明的转换服务、模型 Hub 上的命名空间复用,都在这一条里。

LLM08 隐藏上下文暴露:见 1.3。

LLM09 向量与嵌入弱点:embedding 存储的跨租户泄漏、语义注入、直接访问数据库、对存储向量的完整性攻击。这是唯一被评为"中"的一条,但对 RAG 系统它是核心风险之一——你的知识库本身就是攻击面。

2.3 资源与权限​

LLM03 过度代理:见 1.1。

LLM04 供应链:第三方模型供应商、微调服务、插件、工具库、RAG 框架被投毒;模型产物不是它声称的那个(未签名权重、被劫持的转换服务)。这一条在做模型接入时最实际——见《多模型接入与降级链》,换 provider 时你也在换供应链。

LLM06 无限制消耗(Unbounded Consumption):这个名字是 2025 版改的(旧版叫 Model DoS,只涵盖服务拒绝),2026 版沿用了下来、位次从 #10 升到 #6——现在的含义同时涵盖服务拒绝和钱包拒绝。过多 API 调用、token 洪水、上下文窗口耗尽、推理死循环,都能既拖垮服务又烧光预算。

3. 每一类对应到你能做的具体事​

清单的价值在于把它翻译成工程动作。下面这张表按"在哪一层能做"组织:

风险实现层能做的在哪一层
LLM01 注入检索内容与指令分区标记;工具调用前校验参数检索服务 / 执行层
LLM02 信息泄露检索期权限过滤;输出前 PII 检测检索服务 / 输出网关
LLM03 过度代理工具白名单按任务收窄;写操作硬确认执行层(不是提示词)
LLM04 供应链锁定模型版本与来源;校验权重签名构建与部署
LLM05 投毒只用可信来源的微调产物;评测集守门训练/微调管线
LLM06 无限制消耗每用户 token 预算、并发上限、步数上限网关 / 编排层
LLM07 误导信息引用溯源;低置信度拒答生成后校验
LLM08 上下文暴露不要把密钥/内部策略放进系统提示词;工具 schema 按需暴露提示词设计
LLM09 向量弱点租户隔离;索引写入校验检索服务
LLM10 输出处理消毒后再渲染/执行;代码在沙箱里跑下游消费方

三点观察:

大部分动作不在模型层。 十条里有七条的主要缓解手段在检索服务、执行层、网关、下游消费方——也就是你自己写的代码里,不在提示词里,也不依赖模型供应商。

执行层承担最多。 LLM03、LLM10、部分 LLM01 都在"模型决定做什么 / 系统是否放行"这条边界上。这条边界是唯一能强制生效的地方,因为它是确定性的。

LLM08 是设计阶段的事。 系统提示词里放什么,是写之前就该想清楚的:密钥不放、内部策略不放、工具 schema 按任务暴露而不是全量暴露。

4. 对 RAG 系统特别相关的两条​

如果只挑两条跟你的检索链路最相关的,是 LLM09 和 LLM02。

LLM09 说的是:向量库本身是攻击面。隔离怎么做、元数据怎么标、写入怎么校验,在《权限过滤要在检索前》里已经写过了。

LLM02 说的是:一旦越权内容进了上下文,它就有可能在回答里出现。注意这条里的"过度检索"——不是权限问题,是取了太多不需要的内容。上下文里塞 20 个切片,其中 3 个含客户手机号,模型就可能在某个回答里把手机号写出来。所以取多少、取哪些,既是成本问题也是安全问题。

反过来,LLM07 的缓解(溯源)和 LLM02 的缓解(过滤)会互相强化:过滤保证进来的都是该进的,溯源保证出去的都有出处。

5. 这个清单怎么用​

不要当合规检查表用。 打十个勾然后宣称"覆盖了 OWASP LLM Top 10"是最常见的误用。清单的作用是指出你可能没想到的攻击面,而不是证明你已经安全。

更有用的三种用法:

做威胁建模时的提示清单。 设计一个新功能时,逐条问一遍"这个功能会中哪几条"。多数时候会找出一两条根本没考虑过的。

事故复盘时的归因框架。 出事之后用编号描述,比"我们被注入了"精确得多——是 LLM01 的间接注入,还是 LLM10 的输出没消毒?两者的修复位置完全不同。

安全评审的共同语言。 "这个功能对 LLM03 的缓解措施是什么"是一个能让安全和工程对上话的问题。

5.1 和 Agentic 清单的关系​

2026 版正式交叉引用了 OWASP Top 10 for Agentic Applications(ASI01–ASI10)。两份清单重叠但互不替代:LLM 清单覆盖单轮模型应用,Agentic 清单覆盖会规划、会调工具、有记忆、会互相调用的系统。

如果你已经在做 Agent,两份都要看——Agentic 清单是增量,不是重来。见《Agentic 的十类风险》。

6. 三条容易记错的地方​

  • 版本号:现在是 2026 版,2025 版已归档。写文章或做评审材料时引用错版本,会直接暴露信息滞后——尤其是 LLM03 和 LLM08 这两条,新旧版名称和位置都不一样。
  • "系统提示词泄露"这个说法已经不准确了。它还在很多旧材料里,但新版的 LLM08 范围大得多。
  • 不要把 LLM06 理解成"防 DDoS"。它是双向的:既防服务被打垮,也防预算被打爆。后者的发生频率高得多——一个死循环 Agent 一夜之间烧掉几万块,不需要任何攻击者。

最后一点值得展开:LLM06 是这十条里最常被自己人触发的。不需要恶意,一个没有步数上限的循环、一个把整个知识库塞进上下文的查询、一个失败后无限重试的调用,就足够了。所以《限流的三个维度》里那些预算与并发限制,不只是防攻击,也是防自己的 bug。