一句话定义:攻击面(Attack Surface)指一个系统里所有"能被外部触碰、并可能被用来干坏事"的入口总和。它衡量的不是"你有多容易被攻破",而是"你有多少扇门、窗、通风口暴露在外"。
打个比方:一栋房子,小偷不会凭空穿墙。他只会试门、试窗、试阳台、试快递柜、试你贴在门上的备用钥匙。门越多,你需要检查的锁就越多;哪怕每扇门都上了锁,只要有一扇忘了,整栋房子就等于没锁。软件系统同理:每一个输入框、每一个接口、每一个第三方依赖,都是一扇门。
传统软件的入口相对好数:登录框、API 接口、文件上传、对外端口。接入大模型之后,门忽然变多了,而且很多是"新长出来的":
- 提示词入口(Prompt):用户输入不再只是查询条件,而是可以携带指令。一句藏在文档里的"忽略以上要求",就可能让模型改口。
- 工具调用(Tool / AI 词典:Function Calling">Function Calling):模型能查数据库、发邮件、调内部接口。每一次调用都是一次带着权限的对外动作,参数由模型生成,不完全由你控制。
- 检索库(RAG / Vector Store):知识库是共享的。检索到的内容会进入上下文,也就意味着谁往里写,谁就在影响模型说什么。
- 上传文件:PDF、表格、图片、网页快照,都是不可信输入。文件里的一行小字,和用户直接打字,在模型眼里没有区别。
- 模型输出本身:输出会被渲染到页面上、被下游系统解析。它也是攻击面的一部分。
| 维度 | 传统系统 | 接入 AI 之后 |
|---|---|---|
| 主要入口 | 表单、接口、文件上传 | 上述全部,加上提示词、工具、检索库 |
| 输入性质 | 数据 | 数据 + 指令(两者混在一起) |
| 边界 | 相对清晰 | 模糊,模型是"翻译层"也是"执行层" |
| 典型风险 | 注入、越权 | 提示注入、工具滥用、知识库污染 |
和相邻概念的区别:攻击面是"门的数量",漏洞(Vulnerability)是"某扇门没锁好",威胁模型(Threat Model)是"谁会来、想偷什么"。先缩攻击面,再补漏洞,顺序反了会白费力气——你没法给不存在的门配锁。
对从业者的意义:设计时先做减法。不需要联网的工具就别给,能只读的别给写权限,能限定参数范围的别放任自由生成,检索库按权限分区。再给每个入口配一道"人看得懂"的日志和一道"机器拦得住"的校验。
对普通职场人的意义:你在给 AI 授权时,本质上是在扩大自己的攻击面。给一个来路不明的插件开放邮箱读写,和你把家门钥匙塞进快递柜没有本质区别。少装、少授权、别把不该外传的资料直接喂进去,是最省事的防线。具体产品的能力边界,以官方页面为准。
