跳转到内容

安全

Last updated

保护你的源代码和开发环境安全对我们来说非常重要。本页概述了我们在 Cursor 上的安全做法。

如果你发现潜在的安全漏洞,请通过电子邮件发送至 security-reports@cursor.com

如有任何与安全相关的问题,欢迎通过 security@cursor.com 联系我们。

尽管已经有多家大型组织信任并使用 Cursor,但请注意,我们仍在持续完善产品并不断提升安全能力。如果你所处的环境对安全和保密要求极高,在使用 Cursor(或任何其他 AI 工具)时都应格外谨慎。我们希望本页内容能帮助你了解我们的最新进展,并协助你进行合理的风险评估。

认证与第三方评估

Cursor 已通过 SOC 2 Type II 认证。请访问 trust.cursor.com 申请获取报告副本。

我们承诺至少每年由信誉良好的第三方进行一次渗透测试。请访问 trust.cursor.com 申请获取最新报告的执行摘要。

基础设施安全

我们依赖以下次级处理方,大致按从最关键到最不关键的顺序排列。请注意,代码数据会发送到我们的服务器,以支持所有 Cursor 的 AI 功能(参见 AI Requests 部分),并且对于处于隐私模式(旧版)的用户,其代码数据永不会被持久化(参见 Privacy Mode Guarantee 部分)。

了解不同模式如何影响数据的发送与存储方式:

Explore how each mode affects how data is sent and stored.
  • AWSSees and stores code data: Our infrastructure is primarily hosted on AWS, with all servers located in the US.
  • CloudflareSees code data: We use Cloudflare as a reverse proxy in front of parts of our API and website in order to improve performance and security.
  • Microsoft AzureSees code data: Some secondary infrastructure is hosted on Microsoft Azure. All of our Azure servers are in the US.
  • Google Cloud Platform (GCP)Sees code data: Some secondary infrastructure is hosted on Google Cloud Platform (GCP). All of our GCP servers are in the US.
  • FireworksSees code data: Our custom models are hosted with Fireworks, on servers in the US, Europe, or Japan. We have a zero data retention agreement with Fireworks for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Fireworks may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Fireworks does not reuse the data for any other purpose.
  • BasetenSees code data: Our custom models are hosted with Baseten, on servers in the US and Canada. We have a zero data retention agreement with Baseten for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Baseten may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Baseten does not reuse the data for any other purpose.
  • TogetherSees code data: Our custom models are hosted with Together, on servers in the US. We have a zero data retention agreement with Together for users in Privacy Mode and Privacy Mode (Legacy). For Share Data users, Together may temporarily access and store model inputs and outputs to improve our inference performance, for the minimum duration required to perform such tasks, after which it is securely deleted. Together does not reuse the data for any other purpose.
  • OpenAISees code data: We rely on OpenAI's models to provide AI responses. In Privacy Mode and Privacy Mode (Legacy), we have a zero data retention agreement with OpenAI. Additionally, requests may be sent to OpenAI for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. For users that created their account after October 15, 2025, in Share Data mode, prompts and limited telemetry may also be shared with OpenAI when directly using their models.
  • AnthropicSees code data: We rely on many of Anthropic's models to give AI responses. Additionally, requests may be sent to Anthropic for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. We have a zero data retention agreement with Anthropic.
  • Google Cloud Vertex APISees code data: We rely on some Gemini models offered over Google Cloud's Vertex API to give AI responses. Requests may be sent to Google Cloud Vertex API for certain background or summarization tasks with zero data retention, regardless of which model provider you have selected*. We have a zero data retention agreement with Vertex.
  • xAISees code data: We rely on some Grok models offered over the xAI API to give AI responses. We have a zero data retention agreement with xAI.
  • TurbopufferStores obfuscated code data: Embeddings of indexed codebases, as well as metadata associated with the embeddings (obfuscated file names), are stored with Turbopuffer on Google Cloud's servers in the US. You can read more on the Turbopuffer security page. Users can disable codebase indexing; read more about it in the Codebase Indexing section of this document.
  • ExaSee search requests (potentially derived from code data): Used for web search functionality. Search requests are potentially derived from code data (e.g., when using "@web" in the chat, a separate language model will look at your message, conversation history and current file to determine what to search for, and Exa/SerpApi will see the resulting search query).

*Cursor 遵守模型阻止列表规定,不会向阻止列表中的模型发送任何请求。

我们的任何基础设施均不位于中国境内。我们不会直接使用任何中国公司作为次级处理方,并且据我们所知,我们的任何次级处理方也都没有这样做。

我们基于最小权限原则为团队成员分配基础设施访问权限。我们在 AWS 上强制启用多因素身份验证,并通过网络级控制和密钥/凭证等手段限制对资源的访问。

客户端安全

Cursor 是由 Microsoft 维护的开源项目 Visual Studio Code(VS Code)的一个 fork。他们会在 GitHub 安全页面 上发布安全公告。我们大约每两个主线 VS Code 版本,就会将上游 'microsoft/vscode' 代码库合并进 Cursor。你可以在应用中点击「Cursor > About Cursor」来查看当前 Cursor 版本所基于的 VS Code 版本。如果上游 VS Code 中存在高危级别的安全补丁,我们会在下一次合并前单独 cherry-pick 该修复并立即发布。

我们的应用会向以下域名发起请求,以与我们的后端进行通信。如果你处于企业代理或防火墙之后,请将这些域名加入白名单,以确保 Cursor 能正常工作。

  • 'api2.cursor.sh':用于大多数 API 请求。

  • 'api3.cursor.sh':用于 Cursor Tab 请求(仅 HTTP/2)。

  • 'repo42.cursor.sh':用于代码库索引(仅 HTTP/2)。

  • 'api4.cursor.sh''us-asia.gcpp.cursor.sh''us-eu.gcpp.cursor.sh''us-only.gcpp.cursor.sh':根据你的地理位置,用于 Cursor Tab 请求(仅 HTTP/2)。

  • 'marketplace.cursorapi.com''cursor-cdn.com''downloads.cursor.com''anysphere-binaries.s3.us-east-1.amazonaws.com':用于客户端更新以及从扩展市场下载扩展。

与 VS Code 相比,有两点与安全相关的差异需要注意:

  1. Workspace Trust 在 Cursor 中默认是禁用的。你可以在 Cursor 设置中将 'security.workspace.trust.enabled' 设为 'true' 来启用它。我们默认禁用它,是为了避免 Workspace Trust 的「Restricted Mode」与 Cursor 的「Privacy Mode」之间产生混淆,并且因为其信任属性相当微妙且难以理解(例如,即便启用 Workspace Trust,你也不会因此免受恶意扩展的影响,而只是防范恶意文件夹)。我们欢迎社区就是否应默认启用此功能提供反馈。

  2. 扩展代码签名:Cursor 不会验证从扩展市场下载的扩展的签名。VS Code 最近开始执行这一点。具体来说,在 Cursor 中,'extensions.verifySignature' 设置默认是 'false',而在 VS Code 中则默认是 'true'。如果你在 Cursor 中将其设为 'true',那么每次尝试下载扩展时,你都会看到一个弹窗提示签名验证失败。我们计划在中期支持扩展签名验证。

AI 请求

为了提供各项功能,Cursor 会向我们的服务器发起 AI 请求,这会出于多种原因发生。比如,当你在聊天中提问时,我们会发送 AI 请求;在你每一次按键输入时,我们也会发送 AI 请求,以便 Cursor Tab 能为你提供自动补全建议;我们还可能在后台发送 AI 请求,用于构建上下文或查找可能需要展示给你的 bug。

一个 AI 请求通常会包含一些上下文信息,例如你最近查看的文件、你的对话历史,以及基于语言服务器信息选取的相关代码片段。这些代码数据会先发送到我们在 AWS 上的基础设施,然后再转发给对应的语言模型推理服务提供商(Fireworks/OpenAI/Anthropic/Google)。请注意,即使你在设置中为 OpenAI 配置了自己的 API key,请求也始终会先经过我们在 AWS 上的基础设施。

目前我们还无法让 Cursor 应用直接路由到你在企业环境中部署的 OpenAI/Azure/Anthropic,因为提示词构建是在我们的服务器端完成的,而且我们在 Fireworks 上的自定义模型对于提供良好的用户体验至关重要。我们目前尚未提供自托管服务器部署选项。

代码库索引

Cursor 允许你对代码库进行语义索引,使其能够在理解你所有代码上下文的基础上回答问题,并通过引用已有实现来写出更好的代码。代码库索引默认启用,但可以在设置中关闭。

我们的代码库索引功能工作方式如下:启用后,它会扫描你在 Cursor 中打开的文件夹,并计算由所有文件哈希值组成的 Merkle 树。由 '.gitignore''.cursorignore' 指定的文件和子目录会被忽略。随后,这棵 Merkle 树会被同步到服务器。每隔 10 分钟,我们会检查是否存在哈希不匹配的情况,并利用 Merkle 树找出哪些文件发生了变化,仅上传这些文件。

在我们的服务器上,我们会对文件进行分块并生成向量嵌入(embedding),然后将这些嵌入存储在 Turbopuffer 中。为支持按文件路径过滤向量搜索结果,我们为每个向量存储一个混淆后的相对文件路径,以及该分块对应的行范围。我们还会将嵌入缓存在 AWS 中,并使用分块的哈希值作为索引,以确保对同一代码库进行第二次索引时速度快得多(这对团队尤其有用)。

在推理阶段,我们会计算一个嵌入,交由 Turbopuffer 执行最近邻搜索,将混淆后的文件路径和行范围返回给客户端,并在客户端本地读取对应的文件分块。然后,我们再将这些分块发送回服务器,以回答用户的问题。这意味着对于隐私模式用户,我们不会在服务器或 Turbopuffer 中存储任何明文代码。

一些说明:

  • 若要阻止代码库中的特定文件被发送到 Cursor 的服务器并包含在 AI 请求中,请在代码库中添加一个 '.cursorignore' 文件,并在其中列出应排除的文件和目录。Cursor 将尽最大努力防止这些文件在任何请求中被暴露。

  • 文件路径混淆细节:路径会按 '/''.' 拆分,每个片段使用存储在客户端的密钥和一个确定性的短 6 字节 nonce 进行加密。这样会泄露一些目录层级信息,并产生少量 nonce 冲突,但能隐藏大部分信息。

  • 嵌入还原:学术研究表明,在某些情况下可以对嵌入进行还原。现有攻击依赖于能够访问模型,并将短字符串嵌入到高维向量中,这让我们认为在这里实施这种攻击的难度相对较高。尽管如此,一个成功攻入我们向量数据库的对手,确实有可能从中获知一些关于已索引代码库的信息。

  • 当在一个 Git 仓库中启用代码库索引时,我们也会索引 Git 历史。具体来说,我们会存储提交 SHA、父提交信息和混淆后的文件名(同上)。为了让处于同一 Git 仓库且属于同一团队的用户共享这一数据结构,用于混淆文件名的密钥是从最近提交内容的哈希中派生出来的。提交消息以及文件内容或 diff 不会被索引。

  • 我们的索引功能经常承受较大负载,可能导致许多请求失败。这意味着有时文件需要上传多次才能被完全索引。其中一种表现形式是,如果你检查到 'repo42.cursor.sh' 的网络流量,可能会看到比预期更多的带宽占用。

隐私模式保障

隐私模式可以在设置中启用,也可以由团队管理员启用。启用后,我们保证模型提供商绝不会存储代码数据或将其用于训练。任何人(免费用户或 Pro 用户)都可以启用隐私模式,并且对于任何团队成员用户,默认都会被强制启用隐私模式。

我们对隐私模式的保障极为重视。超过 50% 的 Cursor 用户已启用隐私模式。

每个发送到我们服务器的请求都会带上一个 'x-ghost-mode' 头,其中包含一个布尔值,用于表示用户当前是否处于隐私模式。为避免将处于隐私模式的用户意外当作非隐私模式用户,我们在该头缺失时始终默认认为用户处于隐私模式。

所有发往我们服务器的请求都会首先经过一个代理层(proxy),由它决定应该由哪个逻辑服务处理该请求(例如 "chat service" 或 "Cursor Tab service")。每个逻辑服务都有两个几乎完全相同的副本:一个用于处理隐私模式请求,一个用于处理非隐私模式请求。proxy 会检查 'x-ghost-mode' 头的值,并将请求路由到对应的副本。各副本本身也会再次检查该头,以增加冗余。默认情况下,来自隐私模式副本的所有日志函数都是 no-op,除非带有类似 'infoUnrestricted' 的后缀;对于这类日志,我们会非常谨慎地审核,确保从不附带任何潜在的代码数据或提示内容。对于会产生后台任务的请求,我们同样为隐私模式与非隐私模式分别维护并行的队列和 worker 副本。这套并行基础设施让我们对隐私模式保障及其在防止意外错误或 bug 上的可靠性充满信心。

对于团队级别的隐私模式强制策略,每个客户端每 5 分钟会 ping 一次服务器,以检查用户是否属于一个强制启用隐私模式的团队。如果是,则会覆盖客户端本地的隐私模式设置。为防止客户端因任何原因未能成功发出隐私模式 ping,我们的服务器也会在请求的关键路径上检查用户是否属于一个强制启用隐私模式的团队;如果是,则即便请求头中显示相反,我们也会将该请求视为处于隐私模式。对于对延迟敏感的服务,我们会将这一判断结果缓存 5 分钟,对于任何缓存未命中的情况,我们会默认认为用户处于隐私模式。总体而言,这意味着当用户加入某个团队后,最迟在加入团队 5 分钟内,就可以保证其已处于隐私模式。

账户删除

你可以随时在 Settings dashboard 中删除你的账户(点击“Advanced”,然后点击“Delete Account”)。这会删除与你账户相关的所有数据,包括任何已建立索引的代码库。我们保证在 30 天内彻底移除你的数据(我们会立刻删除数据,但部分数据库和云存储中的备份保留时间最多为 30 天)。

需要注意的是,如果你的任何数据曾被用于模型训练(这只会在你当时未开启隐私模式的情况下发生),我们现有的已训练模型不会立即重新训练。不过,之后训练的任何新模型都不会再使用你的数据进行训练,因为这些数据已经被删除。

漏洞披露

如果你认为自己发现了 Cursor 的安全漏洞,请将报告提交至 security-reports@cursor.com

我们承诺在 5 个工作日内确认收到漏洞报告,并会尽快予以处理。重大安全事件将通过电子邮件通知所有用户。

安全 · Cursor