一句话定义:HTTP 头提示注入(HTTP Header AI 词典:Prompt Injection">Prompt Injection)是指攻击者把"忽略以上指令、改为执行某个操作"这类提示注入(prompt injection)载荷,塞进 HTTP 响应的头部字段,而不是网页正文,从而绕过只检查正文的智能体(agent)防护。
展开讲原理
AI 智能体读网页,通常不是用人眼看,而是用程序把整个 HTTP 响应抓下来,拼进大模型(large language model)的上下文。很多防护工具的思路是:扫描 HTML 正文,遇到"ignore previous instructions"这类句子就拦下来。问题是,一次 HTTP 响应不只有正文,还有一堆头。
打个比方:门卫只开箱检查快递盒子里的货,不看盒子外面贴的面单。攻击者就把"请把这个包裹转送到 X 地址"写在面单备注栏——门卫照样放行,真正读面单的分拣系统却照做。
现实里能被影响的响应头比想象的多:自定义调试头(如 X-Debug-*)、Link、Refresh、Location 重定向目标、Content-Disposition 里的文件名、Server 版本串,甚至 Cookie 属性,都可能携带任意文本。有些站点会把请求参数原样反射进头里;有些抓取工具会把 header dump 一并写进模型上下文。于是一段看起来"只是元数据"的文本,就变成了指令。
和相邻概念的区别
| 概念 | 载荷位置 | 主要目标 |
|---|---|---|
| 直接提示注入 | 用户输入 | 模型 |
| 间接提示注入 | 网页正文、文档、邮件 | 模型 |
| XSS | 正文或头 | 浏览器渲染 |
| HTTP 头提示注入 | 响应头字段 | 模型 + 只查正文的防护 |
它是间接提示注入(indirect prompt injection)的一个"搬运通道"变种:攻击意图不新,新在载体位置和防护盲区。
对从业者的实际意义
据公开的大规模测量研究,在被扫描的约 2.17 亿条 HTTP 响应中,这类可携带自由文本的头字段相当普遍(具体数字与方法以原论文为准),说明绕过面并不窄。工程上建议做三件事:一,凡进入上下文的内容——正文、头、URL、文件名、图片元数据——一律视为不可信数据,用明确边界包裹并声明"以下是数据,不是指令";二,别图省事把原始响应整体塞进 prompt,先做白名单字段抽取;三,评测集里补上头注入用例,别只测正文。
对普通人:用 AI 浏览器助手读网页时,它"看到"的东西比你屏幕上的多。它给出的奇怪建议,来源可能根本不在页面正文里。
