# 下载的文件会打电话回家吗？我们在 macOS 26 上测试了 Spotlight 和 Quick Look

> 有一种说法称 macOS 索引使未打开的文件获取远程内容。我们测试了它：索引和缩略图保持沉默，但按空格键预览却没有。

HisnLabs Security & Research Team · Published 2026-09-25
Canonical: https://hisnlabs.com/zh/blog/quick-look-preview-remote-content-macos

这个故事的一个版本在安全文章中流传，其中一些现在是由人工智能助手生成的：macOS 的后台索引守护进程 `mdworker` 据说可以在您下载的任何 HTML 文件中获取远程图像，因此您从未打开的文件仍然可以向发送它的人报告您的 IP 地址。这是一个好故事。这也是一种在重复之前应该进行测试的说法，所以我们测试了它。

> **Note:** 简短版本，在 macOS 26.7 上测量：下载文件并让 Spotlight 对其进行索引不会导致网络请求，快速查看缩略图也不会。按空格键预览文件：它的远程图像、样式表和 SVG 嵌入图像都已获取。

## 新文件会发生三种不同的情况

该主张模糊了三个独立的机制。当文件到达磁盘时，Spotlight 的元数据服务器将其交给导入器插件，在 `mdworker_shared` 进程内运行，该进程提取文本和属性，以便文件变得可搜索（[导入](https://keith.github.io/xcode-man-pages/mdimport.1.html) 和 [米德尔斯](https://keith.github.io/xcode-man-pages/mdls.1.html) 是该文件的命令行窗口）。另外，当 Finder 需要图标时，[快速查看缩略图](https://developer.apple.com/documentation/quicklookthumbnailing) 会呈现一个小缩略图。仅当您选择文件并按空格键时，[快速浏览](https://developer.apple.com/documentation/quicklook) 才会呈现完整预览。其中每一个的行为都可能不同，因此每一个都需要自己的测试。

## 测试

我们在环回地址上运行了一个小型 HTTP 监听器，用它的 User-Agent 记录每个请求，然后在 `~/Downloads` 中创建两个指向它的文件：一个带有单像素图像和外部样式表的 HTML 页面，以及一个带有嵌入外部图像的 SVG。 Loopback 使实验保持独立；远程跟踪服务器将收到相同的请求，以及您的公共 IP 地址。

*q3-report.html（诱饵）*

```html
<html><head><title>Q3 Financial Report</title></head><body>
  <h1>Financial Summary</h1>
  <img src="http://127.0.0.1:8765/html-img.png" width="1" height="1">
  <link rel="stylesheet" href="http://127.0.0.1:8765/html-css.css">
</body></html>
```

*徽章.svg*

```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="100">
  <image xlink:href="http://127.0.0.1:8765/svg-image.png" width="100" height="100"/>
</svg>
```

### 1. 下载即可：Spotlight 索引

创建文件后，我们等待了 40 秒，然后确认 Spotlight 已将它们编入索引。听众什么也没收到。

```console
$ mdls -name kMDItemContentType ~/Downloads/fireai-lab-test/q3-report.html
kMDItemContentType = "public.html"
# listener log: empty
```

### 2. 强制Spotlight导入器

为了排除时间限制，我们手动运行导入程序。它使用Apple的RichText导入器，提取了37个属性，并且没有提出任何请求。

```console
$ mdimport -t -d1 ~/Downloads/fireai-lab-test/q3-report.html
Imported '…/q3-report.html' of type 'public.html' with plugIn /System/Library/Spotlight/RichText.mdimporter.
37 attributes returned
# listener log: still empty
```

### 3. Finder 图标：快速查看缩略图

```console
$ qlmanage -t -s 256 -o /tmp ~/Downloads/fireai-lab-test/q3-report.html ~/Downloads/fireai-lab-test/badge.svg
* …/q3-report.html produced one thumbnail
Done producing thumbnails
# listener log: still empty
```

### 4. 按空格键：快速查看预览

`qlmanage -p` 打开与在 Finder 中选择文件并按空格键 ([质量管理](https://keith.github.io/xcode-man-pages/qlmanage.1.html)) 相同的预览面板。这次，两个文件的监听器立即亮起：

*监听日志*

```console
$ qlmanage -p ~/Downloads/fireai-lab-test/q3-report.html
13:40:22.408 GET /html-img.png   UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
13:40:22.408 GET /html-css.css   UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
$ qlmanage -p ~/Downloads/fireai-lab-test/badge.svg
13:40:30.035 GET /svg-image.png  UA=Mozilla/5.0 (Macintosh; …) AppleWebKit/605.1.15 … Safari/605.1.15
```

| 用户做了什么 | 机制 | 远程请求？ |
| --- | --- | --- |
| 什么都没有（文件已下载） | 聚焦 `mdworker_shared` 中的导入程序 | 不 |
| 没有（强制导入） | `mdimport`，富文本导入器 | 不 |
| 看了看文件夹 | 快速查看缩略图（Finder 图标） | 不 |
| 选择文件，按空格键 | 快速查看预览 (WebKit) | 是：图像、样式表、SVG 图像 |

*HisnLabs 测试，macOS 26.7，Apple 芯片，2026 年 9 月 25 日。环回侦听器；每个案例运行一次。*

## 这意味着什么

“零点击”版本不是我们测量的：位于“下载”中的文件由 Spotlight 索引，并显示为未调出的图标。这很重要，因为建立在错误模型上的防御会在错误的地方浪费精力。例如，从网络中阻止 `mdworker` 不会改变此测试中的任何内容。

一键版本是真实的。 Quick Look 的预览使用 WebKit 渲染 HTML 和 SVG 并加载其远程资源，因此在附加的“报告”上按一下空格键即可告诉发件人该文件被查看、何时查看以及从哪个 IP 地址查看。这是[网络信标](https://en.wikipedia.org/wiki/Web_beacon)，与电子邮件跟踪像素使用的技巧相同，Apple 的[邮件隐私保护](https://support.apple.com/guide/mail/use-mail-privacy-protection-mlhl03be2866/mac) 的存在是为了在邮件中钝化；当相同的内容作为文件到达时，它根本不会被覆盖。用攻击者的话来说，这是侦察，而不是妥协：[米特 ATT&CK T1598](https://attack.mitre.org/techniques/T1598/) 在真正的攻击之前对这种信息收集进行分类。

## 本次测试的局限性

- 一个 macOS 版本 (26.7)，每个案例运行一次。其他版本的行为可能有所不同；在您的计算机上重新运行它，上面的文件就是您所需要的。
- 我们使用了环回地址。公共 URL 对于 WebKit 的行为是相同的，但我们在这里没有对其进行测量。
- 我们测试了 HTML 和 SVG。具有远程引用的其他类型（例如 `.webarchive`、具有链接图像的 Office 文档或第三方快速查看扩展）未经测试，并且在任一方向上的行为可能有所不同。
- `qlmanage -p` 是 Apple 用于预览的调试前端； Finder 的空格键预览使用相同的框架，但我们没有检测 Finder 本身。

## 该怎么办

1. 将快速查看不受信任的 HTML 或 SVG 文件视为打开它。如果您想安全地检查其中一个，请将其作为文本读取：`cat file.html`，或在纯文本编辑器中打开它。
2. 在预览之前检查文件的类型：`mdls -name kMDItemContentType file` 告诉您“快速查看”会将其呈现为什么，无论其图标表示什么。
3. 观察哪个进程建立了连接，而不仅仅是是否发生了连接。这是代表 Apple 行事的 WebKit 预览版，这就是为什么只信任或不信任“您安装的应用程序”的规则会错过它。

更广泛的教训是关于方法。这个故事的戏剧版本写得很自信，很容易出版。二十分钟的聆听者和四个命令显示了哪里出了问题，以及真正的、较小的风险在哪里。

## FireAI 和 HisnLabs 在其中扮演的角色

The fetch in this test came from a WebKit preview running on Apple’s behalf, not from an app you installed, which is exactly the kind of connection a per-app firewall exists to show you: FireAI lists the process, the destination and the country, and lets you deny it.

FireAI 是 HisnLabs 自己的产品：一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接，并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行，因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确：归类哪些域名只是普通的遥测、哪些属于真正的服务，追踪连接背后的国家和网络，并用真实的流量模式训练设备端模型（FireAI Pilot 功能）——这一切都不会离开你的 Mac。

你可以阅读它背后的技术决策，或试用 FireAI 17 天：[HisnLabs 出品的 FireAI](https://hisnlabs.com/fireai/zh/download)。

## Sources

- [qlmanage(1) man page](https://keith.github.io/xcode-man-pages/qlmanage.1.html)
- [mdimport(1) man page](https://keith.github.io/xcode-man-pages/mdimport.1.html)
- [mdls(1) man page](https://keith.github.io/xcode-man-pages/mdls.1.html)
- [Apple Developer: Quick Look](https://developer.apple.com/documentation/quicklook)
- [Apple Developer: Quick Look Thumbnailing](https://developer.apple.com/documentation/quicklookthumbnailing)
- [Apple: Use Mail Privacy Protection on Mac](https://support.apple.com/guide/mail/use-mail-privacy-protection-mlhl03be2866/mac)
- [MITRE ATT&CK T1598: Phishing for Information](https://attack.mitre.org/techniques/T1598/)
- [Wikipedia: Web beacon](https://en.wikipedia.org/wiki/Web_beacon)
