Cursor 的 Privacy Mode 到底保护了什么

wescode · 2026-10-23 · 代码安全 / Cursor / Privacy Mode / 数据路径

利益声明:本文作者参与了 wescode 的开发。文中涉及 wescode 的技术描述基于内部测试数据;涉及其他工具的描述基于各家公开文档和社区反馈。

本文是「代码安全实录」系列第 4 篇。本文的所有引用均来自 Cursor 官方公开文档。Cursor 没有被曝出静默上传或隐藏后门。这篇文章讨论的是架构选择,不是道德问题。

"Cursor 的 Privacy Mode 开了之后,我的代码安全吗?"

这可能是 AI 编程工具社区里被问得最多的安全问题。每次有新的安全事件爆发——Grok Build 上传整库、ZCode 静默打包——评论区都会有人问同一个问题。

答案不是简单的"安全"或"不安全"。Cursor 的做法与 Grok Build 和 ZCode 有本质区别:它没有隐藏行为,它的数据处理方式是文档化的。但文档化不等于大多数用户读过文档并理解了其中的含义。

这篇文章的目的是:把 Cursor 官方文档中关于数据隐私的每一条说明拿出来,逐条分析它保护了什么、没保护什么。


一、Cursor 官方文档说了什么

以下内容引用自 Cursor 官方 Privacy 页面(cursor.com/cn/data-use)和 Cursor Docs(cursordocs.com)。原文为英文,此处附中文翻译。

关于 Privacy Mode

"When privacy mode is enabled, none of your code will ever be stored by us or any third-party."

开启隐私模式后,你的代码不会被我们或任何第三方存储。

"We do not train on your code. When privacy mode is enabled, we go further and don't even retain your code after the request is processed."

我们不使用你的代码进行训练。开启隐私模式后,我们更进一步——在请求处理完成后,不保留你的代码。

关于数据传输

"Your code is sent to our server and then to the model provider (e.g., OpenAI, Anthropic). We don't store it, but it does pass through our backend."

你的代码被发送到我们的服务器,然后转发给模型提供商(如 OpenAI、Anthropic)。我们不存储它,但它确实经过了我们的后端。

关于自带 API Key(BYOK)

"Even if you bring your own API key, requests still go through our backend. This is because we need to assemble the full prompt with context, apply our custom model configurations, and handle the response parsing."

即使你自带 API Key,请求仍然经过我们的后端。这是因为我们需要在后端组装完整的 prompt(包含上下文)、应用自定义模型配置、处理响应解析。

关于 Embedding

"For codebase indexing, we generate embeddings of your code. These embeddings are stored in our database to enable fast semantic search."

为了代码库索引,我们会为你的代码生成 embedding 向量。这些 embedding 存储在我们的数据库中,用于实现快速语义搜索。

关于 ZDR(Zero Data Retention)

"For supported models (currently most Anthropic and OpenAI models), we use Zero Data Retention agreements. This means the model provider processes your request but does not retain any of the data."

对于支持的模型(目前是大多数 Anthropic 和 OpenAI 模型),我们使用零数据保留协议。这意味着模型提供商处理你的请求但不保留任何数据。


二、Privacy Mode 保护了什么

基于以上官方文档,Privacy Mode 确实提供了以下保护:

保护项说明状态
代码不用于训练Cursor 明确声明不用用户代码训练自己的模型✅ 已承诺
ZDR 协议与 OpenAI/Anthropic 签署零数据保留协议,模型提供商处理后不保留数据✅ 对支持的模型生效
明文不持久化开启 Privacy Mode 后,Cursor 服务端在请求处理完成后不保留代码明文✅ 已承诺
透明度数据处理方式在官方文档中有详细说明✅ Privacy FAQ 持续更新
SOC 2 合规Cursor 通过了 SOC 2 Type II 认证✅ 有第三方审计

这些保护是实质性的。 与 Grok Build(默认上传整库、开关无效、无文档说明)和 ZCode(静默打包、用户不知情)相比,Cursor 在透明度和数据保护承诺上做得显著更好。


三、Privacy Mode 没保护什么

同样基于官方文档,以下是 Privacy Mode 没有覆盖的方面:

未保护项说明风险等级
请求仍走 Cursor 后端即使自带 API Key,代码仍经过 Cursor 服务器🟡 架构性
Embedding 长期存储代码的 Embedding 向量存储在 Cursor 的数据库中🟡 需评估
非 ZDR 模型例外使用不支持 ZDR 的模型时,模型提供商可能保留数据🟡 需确认模型列表
风控/安全触发Cursor 的安全系统可能在异常情况下记录额外信息🟡 文档未详述
传输过程中的临时存在代码在 Cursor 后端的内存中短暂存在(处理期间)🟢 短暂且有承诺

下面逐一展开。


四、"即使自带 Key 也走后端"的技术原因

这是被问得最多的问题之一:我都自带 API Key 了,为什么请求还要经过 Cursor 的服务器?

Cursor 在文档中给出了技术原因:prompt 组装在服务端完成。

什么是 prompt 组装

当你在 Cursor 中编辑代码并向 AI 提问时,发送给模型的不只是你的问题。一个完整的 prompt 包括:

  1. 系统提示词——定义 AI 的行为(如"你是一个代码助手")
  2. 上下文文件——你当前打开的文件、光标位置附近的代码
  3. Embedding 检索结果——与你的问题语义相关的代码片段
  4. 对话历史——之前的问答记录
  5. 你的问题——用户实际输入的文本
  6. 工具定义——AI 可以调用的工具列表和格式

Cursor 的架构选择是在服务端完成这个组装过程。也就是说,你的代码片段先被发送到 Cursor 服务器,服务器将它们与系统提示词、检索结果等组合成完整的 prompt,然后转发给模型提供商。

为什么不在客户端完成

这不是一个简单的决定。在服务端组装 prompt 有几个技术理由:

  1. Embedding 检索:代码的 Embedding 向量存储在 Cursor 的服务端数据库中,语义搜索在服务端执行,结果直接拼入 prompt
  2. 模型配置:不同模型有不同的 prompt 格式要求、token 限制、特殊标记,在服务端统一处理更灵活
  3. 响应解析:模型返回的 diff、代码修改需要特定的解析逻辑
  4. 跨设备一致性:服务端逻辑保证在不同客户端版本上行为一致

这意味着什么

即使你自带了 Anthropic 或 OpenAI 的 API Key,你的代码仍然在以下路径上流动:

你的编辑器 → Cursor 服务器(组装 prompt) → 模型提供商 → Cursor 服务器(解析响应) → 你的编辑器

而不是:

你的编辑器 → 模型提供商 → 你的编辑器

Cursor 承诺在这个过程中不存储你的代码(Privacy Mode 开启时)。但代码确实经过了一个你不控制的服务器。对于大多数个人开发者来说,这个风险可以接受。对于安全要求严格的场景(金融、政府、军工),"经过第三方服务器"这件事本身可能就过不了安全审查——不管第三方是谁、承诺了什么。


五、Embedding 向量的安全含义

什么是 Embedding

Embedding 是把代码文本转换成一组数字(向量)的过程。比如:

def calculate_tax(income: float, rate: float) -> float:
    return income * rate

这段代码会被转换成一个类似 [0.12, -0.34, 0.56, ..., 0.78] 的 1536 维浮点数向量(维度取决于所用的 Embedding 模型)。

向量的生成过程是单向的——给定代码可以生成向量,但给定向量无法还原出原始代码。这和密码学中的哈希函数类似,但有一个重要区别:语义相近的代码会产生相近的向量。这是 Embedding 能用于语义搜索的原因,也是它的安全含义所在。

从 Embedding 能推断什么

可以推断不能推断
代码的功能领域(如"这是一个支付处理模块")代码的原始文本
架构模式(如"使用了微服务、消息队列")具体的变量名和实现细节
依赖关系(如"使用了 Stripe SDK")完整的函数实现
代码之间的语义相似度API Key 或密码的具体值
代码库的技术栈组成具体的业务逻辑细节
项目的大致规模和复杂度某个函数的参数和返回值

Embedding 是一种有损压缩——从向量无法精确还原原始代码。但它保留了足够的语义信息,使得拥有向量数据库访问权的人可以了解项目的技术架构和业务领域,即使看不到一行源代码。

Embedding 反演攻击

学术界已有关于"从 Embedding 向量恢复原始文本"的研究。目前的结论是:

对于大多数场景,Embedding 泄露的信息量远小于源代码泄露。但对于需要保护项目存在性本身的场景(如未公开的产品原型),Embedding 向量已经包含了太多信息。

Embedding 的存储时间

根据 Cursor 文档,Embedding 向量存储在 Cursor 的数据库中,用于后续的语义搜索。文档没有明确说明 Embedding 的保留期限或删除策略。

这意味着:即使你在 Privacy Mode 下使用 Cursor,你的代码的语义表示(Embedding)可能长期存在于 Cursor 的数据库中。

一个需要考虑的情景:如果你删除了 Cursor 账号或取消了订阅,你的 Embedding 数据是否也会被删除?这在文档中没有说明。

如何降低 Embedding 风险

  1. 了解索引范围:Cursor 允许通过 .cursorignore 文件排除不需要索引的目录和文件
  2. 敏感项目不开索引:对于包含敏感信息的项目,可以考虑关闭代码库索引功能
  3. 定期检查:关注 Cursor 文档更新中关于 Embedding 保留策略的说明
  4. 敏感目录加入 .cursorignore:把包含核心算法、密钥管理、安全模块的目录排除在索引之外

.cursorignore 的一个实际例子

# .cursorignore

# 包含密钥和配置的目录
config/secrets/
deploy/

# 核心算法(竞争敏感)
src/core/pricing-engine/
src/core/risk-model/

# 第三方客户数据
data/
fixtures/

# 测试中的硬编码凭证
tests/integration/credentials/

需要注意的是:.cursorignore 排除的文件不会被索引(不生成 Embedding),但如果你在对话中手动打开或引用了这些文件,它们的内容仍然会作为对话上下文发送到 Cursor 后端。.cursorignore 保护的是自动索引,不是手动引用。


六、Cursor 做对了什么

在进行对比之前,有必要明确:Cursor 与 Grok Build、ZCode 不在同一个讨论维度上。

维度Grok BuildZCodeCursor
是否有隐藏的上传行为是是否——行为与文档一致
用户是否被告知数据去向否否是——Privacy FAQ 有详细说明
"关闭"开关是否有效无效无效Privacy Mode 按文档生效
是否有第三方安全审计否事后承诺SOC 2 Type II
上传范围整个 Git 仓库 + 历史整个工作区 + .git 87%代码片段 + Embedding
数据量5.1GiB+313MB每次请求数十 KB

Cursor 做对的事情:

  1. 透明度。数据处理方式写在公开文档里,不是被逆向发现的。Privacy FAQ 持续更新。
  2. 不训练承诺。明确声明不使用用户代码训练模型,并通过 ZDR 协议约束模型提供商。
  3. 第三方审计。SOC 2 Type II 认证意味着有独立审计机构验证了安全流程。
  4. 用户控制。.cursorignore 可以排除敏感文件,Privacy Mode 可以切换。
  5. 持续沟通。面对社区的安全疑问,Cursor 团队在论坛和文档中持续回应。

Cursor 的问题不是不诚实。它是诚实地告诉你"代码经过我们的服务器",然后由你来决定这是否可以接受。


七、另一种架构选择

Cursor 选择了"服务端组装 prompt"的架构。这不是唯一的选择。另一种路线是把代码解析和 prompt 组装全部放在本地完成。

技术上的差异

步骤服务端架构(如 Cursor)本地架构
代码解析(AST)客户端部分 + 服务端全部在本地
Embedding 生成服务端本地(ONNX 等轻量模型)
语义搜索服务端数据库本地 SQLite FTS5
调用图分析不适用(向量检索替代)本地静态分析
Prompt 组装服务端全部在本地
模型调用经服务端转发客户端直连模型 API
响应解析服务端全部在本地

本地架构的数据流:

你的编辑器 → 本地解析 → 本地组装 prompt → 直连模型 API → 你的编辑器

在这个架构下:

两种架构的数据暴露面对比

数据类型服务端架构暴露给本地架构暴露给
源代码片段工具厂商 + 模型厂商仅模型厂商
Embedding 向量工具厂商(长期存储)不暴露(存本地)
项目结构工具厂商不暴露
对话历史工具厂商 + 模型厂商仅模型厂商
API Key工具厂商(代理转发)不暴露(直连模型)

代价

本地架构不是没有代价:

  1. Embedding 质量:本地 Embedding 模型(如 ONNX 量化版)的质量通常低于云端大模型
  2. 索引速度:本地 CPU/GPU 资源有限,大项目的首次索引可能需要更长时间
  3. 跨设备同步:索引存在本地,换设备需要重新建立
  4. 更新灵活性:服务端逻辑可以即时更新,本地逻辑需要推送客户端版本
  5. 开发复杂度:客户端需要处理更多逻辑,不同操作系统的兼容性工作量更大

本地架构的性能现实

一个常见的质疑是"本地机器跑得动代码索引吗?"实际数据:

项目规模本地 tree-sitter 解析本地 FTS5 建索引本地 Embedding(ONNX,CPU)
5 万行< 5 秒< 3 秒~30 秒
20 万行< 15 秒< 10 秒~2 分钟
50 万行< 40 秒< 25 秒~5 分钟
100 万行< 90 秒< 60 秒~12 分钟

以上数据基于 Apple M1/M2 或同级别 x86 CPU,单核(内部测试数据)。首次全量索引后,增量更新通常在秒级完成。

Embedding 是最慢的环节。但首次索引只需要做一次——后续文件修改时只需对变更的文件重新计算 Embedding。如果使用 GPU(即使是集成显卡),速度还可以提升 3-5 倍。

适用场景

两种架构适用于不同的安全需求:

场景推荐架构理由
个人开发者,项目无敏感数据服务端架构完全可以接受功能丰富,体验好
创业公司,有商业秘密但非强合规服务端架构 + Privacy Mode,需评估 Embedding 风险平衡效率和安全
企业内部,有合规要求需要评估代码是否可以经过第三方服务器取决于行业法规
金融/政府/军工代码不出设备是硬性要求,需要本地架构监管要求
处理客户数据的代码本地架构或私有部署数据保护法规

八、各类用户的决策建议

个人开发者

对大多数个人开发者来说,Cursor 的 Privacy Mode 提供了足够的保护。建议:

  1. 开启 Privacy Mode——这是最基本的一步
  2. 使用 .cursorignore 排除包含密钥的文件
  3. 不要在 .env 等配置文件中硬编码生产环境密钥——这是不管用什么工具都应该遵守的安全实践
  4. 了解你的模型选择是否支持 ZDR——优先使用支持零数据保留的模型

公司开发团队

公司需要在效率和安全之间做平衡:

  1. 评估代码敏感度——不是所有项目都需要同等保护。内部工具项目和核心业务逻辑的安全要求不同
  2. 制定 AI 编程工具使用策略——明确哪些项目允许使用、哪些模型允许调用、哪些数据可以发出
  3. 考虑网络监控——通过代理或防火墙规则,了解 AI 编程工具的实际网络行为
  4. 要求供应商回答关键问题——数据存储位置、保留时间、访问权限、是否支持数据删除请求

金融/政府/政企

这类场景通常有明确的数据安全法规要求:

  1. 代码是否可以离开企业网络——如果不可以,服务端架构(不管是谁的)都不适用
  2. 是否需要数据本地化——数据存储在境外服务器可能违反法规
  3. 是否需要可审计——工具的数据处理流程是否可以被企业安全团队独立审计
  4. 是否需要私有部署——在企业内部网络中部署完整的 AI 编程环境

对于这类场景,需要寻找代码不出设备的方案——本地完成代码解析、索引和 prompt 组装,只在调用模型时发送必要的上下文片段,且支持私有部署的模型。


九、一份 Privacy Mode 检查清单

如果你正在使用 Cursor,以下检查清单帮助你评估当前的安全配置:

基础配置(所有人都应该做)

进阶配置(处理敏感项目时)

企业级评估(安全团队应该做)


十、写在最后

这篇文章不是为了批评 Cursor。恰恰相反——在 2026 年的 AI 编程工具安全事件中,Cursor 是做得最透明的一个。它的问题不在于隐藏了什么,而在于它的架构选择对某些安全场景来说不够充分。

架构选择是技术决策,不是道德判断。 Cursor 选择服务端 prompt 组装有合理的技术和产品理由。但用户应该了解这个选择的具体含义,然后基于自己的安全需求做判断——而不是看到"Privacy Mode"三个字就认为万事大吉。

回到开头的问题:"Cursor 的 Privacy Mode 开了之后,我的代码安全吗?"

更准确的回答是:Privacy Mode 保护了你的代码不被用于训练、不被以明文形式长期存储。但它没有改变一个事实:你的代码经过了 Cursor 的服务器,你的代码的语义表示(Embedding)存在于 Cursor 的数据库中。

这是一个你需要知道的事实,不是一个需要恐慌的事实。大多数开发者在大多数场景下,Cursor 的保护措施是足够的。但如果你的项目性质不允许代码经过任何第三方——哪怕是承诺不存储的第三方——那么你需要寻找代码不出设备的方案。

不管选择什么工具,做一个知情的决定——这是本系列文章的唯一目的。


信息来源汇总

#来源类型URL
1Cursor 数据使用说明(中文版)官方文档cursor.com/cn/data-use
2Cursor Docs — Privacy & Security官方文档cursordocs.com
3Cursor Privacy FAQ(论坛)官方forum.cursor.com
4SOC 2 Type II 认证说明安全标准aicpa.org
5OpenAI API Data Usage Policies官方文档openai.com
6Anthropic 商业条款官方文档anthropic.com

本文信息截至 2026 年 10 月 20 日。Cursor 的隐私政策可能随版本更新而变化,请以官方最新文档为准。