# 下载的文件会打电话回家吗?我们在 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
Q3 Financial Report
Financial Summary
```
*徽章.svg*
```xml
```
### 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)