安全
上次更新时间:2025 年 2 月 28 日
保障您的源代码和开发者环境安全对我们至关重要。此页面概述了我们如何处理 Cursor 的安全问题。
请将潜在的漏洞提交到我们的 GitHub 安全页面。
如有任何与安全相关的问题,请随时通过 security@cursor.com 联系我们。
虽然我们已经有几家大型组织信任 Cursor,但请注意,我们仍处于产品发展和提高安全态势的旅程中。如果您在高度敏感的环境中工作,则应谨慎使用 Cursor(或任何其他 AI 工具)。我们希望此页面能让您深入了解我们的进展,并帮助您进行适当的风险评估。
认证和第三方评估
Cursor 已通过 SOC 2 Type II 认证。请访问 trust.cursor.com 以请求报告副本。
我们承诺至少每年委托信誉良好的第三方进行渗透测试。请访问 trust.cursor.com 以请求最新报告的执行摘要。
基础设施安全
我们依赖以下子处理器,大致按从最关键到最不关键的顺序排列。请注意,代码数据会被发送到我们的服务器,以支持 Cursor 的所有 AI 功能(请参阅 AI 请求部分),并且隐私模式用户的代码数据永远不会被持久化(请参阅 隐私模式保证 部分)。
隐私模式已启用(点击查看隐私模式如何影响代码数据的发送位置)
- 查看代码数据:
我们的基础设施主要托管在 AWS 上。我们的大多数服务器位于美国,一些延迟敏感型服务器位于亚洲(东京)和欧洲(伦敦)的 AWS 区域。
- 查看代码数据:
我们的自定义模型托管在 Fireworks 上,服务器位于美国、亚洲(东京)和欧洲(伦敦)。如果禁用隐私模式,Fireworks 可能会存储一些代码数据,以加快我们模型的推理速度。
- 查看代码数据:
我们依赖 OpenAI 的许多模型来提供 AI 响应。即使您在聊天中选择了 Anthropic(或其他人的)模型(例如,用于摘要),也可能会将请求发送到 OpenAI。我们与 OpenAI 签订了零数据保留协议。
- 查看代码数据:
我们依赖 Anthropic 的许多模型来提供 AI 响应。即使您在聊天中选择了 OpenAI(或其他人的)模型(例如,用于摘要),也可能会将请求发送到 Anthropic。我们与 Anthropic 签订了零数据保留协议。
- 查看代码数据:
我们依赖通过 Google Cloud Vertex API 提供的某些 Gemini 模型来提供 AI 响应。即使您在聊天中选择了 OpenAI(或其他人的)模型(例如,用于摘要),也可能会将请求发送到 Google Cloud Vertex API。我们与 Vertex 签订了零数据保留协议。
- 存储混淆的代码数据:
索引代码库的嵌入以及与嵌入关联的元数据(混淆的文件名)存储在 Turbopuffer 上,Turbopuffer 位于 Google Cloud 的美国服务器上。您可以在 Turbopuffer 安全页面上阅读更多信息。用户可以禁用代码库索引;请在本文档的 代码库索引 部分阅读更多相关信息。
- 查看搜索请求(可能源自代码数据):
用于网络搜索功能。搜索请求可能源自代码数据(例如,在聊天中使用“@web”时,单独的语言模型将查看您的消息、对话历史记录和当前文件,以确定要搜索的内容,而 Exa/SerpApi 将看到生成的搜索查询)。
- 不查看代码数据:
我们将 MongoDB 用于某些分析数据,适用于未启用隐私模式的用户。
- 不查看代码数据:
我们使用 Datadog 进行日志记录和监控。正如 隐私模式保证部分 中所述,与隐私模式用户相关的日志不包含任何代码数据。
- 不查看代码数据:
我们使用 Databricks MosaicML 来训练我们的一些自定义模型。来自隐私模式用户的数据永远不会到达 Databricks。
- 不查看代码数据:
我们使用 Foundry 来训练我们的一些自定义模型。来自隐私模式用户的数据永远不会到达 Foundry。
- 不查看代码数据:
我们使用 Voltage Park 来训练我们的一些自定义模型。来自隐私模式用户的数据永远不会到达 Voltage Park。
- 不查看代码数据:
我们使用 Slack 作为我们的内部沟通工具。我们可能会在内部聊天中发送非隐私用户的提示片段以进行调试。
- 不查看代码数据:
我们使用 Google Workspace 进行协作。我们可能会在内部电子邮件中发送非隐私用户的提示片段以进行调试。
- 不查看代码数据:
我们使用 Sentry 来监控我们应用中的错误和性能。代码数据永远不会被显式发送,但可能会在报告的错误中显示。来自隐私模式用户的数据永远不会到达 Sentry。
- 不查看代码数据:
索引文档的嵌入和元数据存储在 Pinecone 上。这些文档是从公共网络获取的。我们正在将这些迁移到 Turbopuffer。
- 不查看代码数据:
我们使用 Amplitude 进行某些分析数据。Amplitude 不存储代码数据;仅存储事件数据,例如“Cursor Tab 请求数”。
- 不查看代码数据:
我们使用 HashiCorp Terraform 来管理我们的基础设施。
- 不查看代码数据:
我们使用 Stripe 来处理账单。Stripe 将存储您的个人数据(姓名、信用卡、地址)。
- 不查看代码数据:
我们使用 Vercel 来部署我们的网站。该网站无法访问代码数据。
- 不查看代码数据:
我们使用 WorkOS 来处理身份验证。WorkOS 可能会存储一些个人数据(姓名、电子邮件地址)。
我们的基础设施均不在中国。我们不直接使用任何中国公司作为子处理器,据我们所知,我们的子处理器也没有这样做。
我们以最小权限原则向团队成员分配基础设施访问权限。我们对 AWS 强制执行多因素身份验证。我们使用网络级控制和密钥来限制对资源的访问。
客户端安全
Cursor 是开源 Visual Studio Code (VS Code) 的一个分支,由 Microsoft 维护。他们在 GitHub 安全页面上发布安全公告。每隔一个 VS Code 主线版本,我们都会将上游 ‘microsoft/vscode’
代码库合并到 Cursor 中。您可以通过点击应用中的“Cursor > 关于 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’
:用于从扩展市场下载扩展。
需要注意的与 VS Code 相关的两个安全差异
工作区信任在 Cursor 中默认禁用。您可以通过在 Cursor 设置中将
‘security.workspace.trust.enabled’
设置为‘true’
来启用它。默认情况下禁用它是为了防止工作区信任的“受限模式”与 Cursor 的“隐私模式”之间产生混淆,并且因为其信任属性细致入微且难以理解(例如,即使启用了工作区信任,您也无法免受恶意扩展的侵害,只能免受恶意文件夹的侵害)。我们乐于听取社区关于是否应默认启用它的反馈。扩展代码签名:Cursor 不验证从市场下载的扩展的签名。VS Code 最近开始这样做。特别是,
‘extensions.verifySignature’
设置在 Cursor 中默认为‘false’
,但在 VS Code 中默认为‘true’
。如果您在 Cursor 中将其设置为‘true’
,则每次尝试下载扩展时,都会看到一个弹出窗口,提示签名验证失败。我们希望在中期未来开始支持扩展签名验证。
AI 请求
为了提供其功能,Cursor 会向我们的服务器发出 AI 请求。这种情况发生在许多不同的原因下。例如,当您在聊天中提出问题时,我们会发送 AI 请求;我们在每次击键时都会发送 AI 请求,以便 Cursor Tab 可以为您提供建议;我们还可能在后台发送 AI 请求,以构建上下文或查找要向您显示的错误。
AI 请求通常包括上下文,例如您最近查看的文件、您的对话历史记录以及基于语言服务器信息的代码片段。此代码数据被发送到我们在 AWS 上的基础设施,然后发送到相应的语言模型推理提供商(Fireworks/OpenAI/Anthropic/Google)。请注意,即使您在设置中为 OpenAI 配置了自己的 API 密钥,请求也始终会访问我们在 AWS 上的基础设施。
我们目前无法从 Cursor 应用直接路由到您的企业部署的 OpenAI/Azure/Anthropic,因为我们的提示构建发生在我们的服务器上,并且我们在 Fireworks 上的自定义模型对于提供良好的用户体验至关重要。我们尚无自托管服务器部署选项。
您拥有 Cursor 生成的所有代码的所有权。
代码库索引
Cursor 允许您对代码库进行语义索引,这使其能够回答与您的所有代码相关的问题,并通过引用现有实现来编写更好的代码。代码库索引默认启用,但可以在入职培训期间或在设置中关闭。
我们的代码库索引功能的工作原理如下:启用后,它会扫描您在 Cursor 中打开的文件夹,并计算所有文件的 Merkle 树哈希值。由 ‘.gitignore’
或 ‘.cursorignore’
指定的文件和子目录将被忽略。然后,Merkle 树将同步到服务器。每 10 分钟,我们会检查哈希值是否不匹配,并使用 Merkle 树来确定哪些文件已更改,并仅上传这些文件。
在我们的服务器上,我们会对文件进行分块和嵌入,并将嵌入存储在 Turbopuffer 中。为了允许按文件路径过滤向量搜索结果,我们为每个向量存储一个混淆的相对文件路径,以及块对应的行范围。我们还将嵌入存储在 AWS 的缓存中,按块的哈希值索引,以确保第二次索引相同的代码库会更快得多(这对于团队尤其有用)。
在推理时,我们计算一个嵌入,让 Turbopuffer 执行最近邻搜索,将混淆的文件路径和行范围发送回客户端,并在客户端本地读取这些文件块。然后,我们将这些块发送回服务器以回答用户的问题。这意味着我们的服务器或 Turbopuffer 上不存储任何明文代码。
一些注意事项
虽然
‘.cursorignore’
文件可以阻止文件被索引,但这些文件仍可能包含在 AI 请求中,例如,如果您最近查看了一个文件,然后在聊天中提出了问题。我们正在考虑添加一个‘.cursorban’
文件,以解决希望阻止文件在任何请求中上传的用例 — 如果您对这个功能感兴趣,请在论坛上发帖或通过 hi@cursor.com 联系我们。文件路径混淆详细信息:路径按
‘/’
和‘.’
分割,每个段都使用存储在客户端的密钥和确定性的短 6 字节 nonce 进行加密。这会泄露有关目录层次结构的信息,并且会发生一些 nonce 冲突,但会隐藏大多数信息。嵌入逆向:学术研究表明,在某些情况下可以逆向嵌入。当前的攻击依赖于访问模型并将短字符串嵌入到大向量中,这使我们相信这里的攻击会有些困难。也就是说,闯入我们向量数据库的攻击者绝对有可能了解有关索引代码库的信息。
当在 Git 仓库中启用代码库索引时,我们还会索引 Git 历史记录。具体来说,我们存储提交 SHA、父信息和混淆的文件名(与上面相同)。为了允许在同一 Git 仓库和同一团队中的用户共享数据结构,用于混淆文件名的密钥是从最近提交内容的哈希值派生的。提交消息和文件内容或差异未被索引。
我们的索引功能经常遇到高负载,这可能会导致许多请求失败。这意味着有时,文件需要上传多次才能被完全索引。这种情况的一种表现是,如果您检查到
‘repo42.cursor.sh’
的网络流量,您可能会看到使用的带宽超出预期。
隐私模式保证
隐私模式可以在入职培训期间或在设置中启用。启用后,我们保证代码数据不会以明文形式存储在我们的服务器或我们的子处理器处。隐私模式可以由任何人(免费或 Pro 用户)启用,并且对于任何团队成员的用户,默认强制启用隐私模式。
我们非常重视隐私模式保证。大约 50% 的 Cursor 用户启用了隐私模式。您可以在我们的 隐私政策中阅读有关隐私保证的更多信息。
启用隐私模式后,代码数据不会持久化在我们的服务器或任何子处理器处。代码数据在请求的生命周期内仍然对我们服务器的内存可见,并且可能会在稍长的时间内(分钟到小时的数量级)存在于长时间运行的后台作业、KV 缓存或临时文件缓存中。对于文件缓存,所有数据都使用客户端生成的密钥进行加密,这些密钥仅在请求期间保留。隐私模式用户提交的代码数据永远不会用于模型训练。
用户的隐私模式设置存储在客户端上。每个发送到我们服务器的请求都包含一个 ‘x-ghost-mode’
标头。为了防止意外地将隐私模式用户视为非隐私模式用户,如果标头丢失,我们始终默认假设用户处于隐私模式。
所有发送到我们服务器的请求首先会访问一个代理,该代理决定应由哪个逻辑服务处理请求(例如,“聊天服务”或“Cursor Tab 服务”)。每个逻辑服务都有两个几乎相同的副本:一个副本处理隐私模式请求,另一个副本处理非隐私模式请求。代理检查 ‘x-ghost-mode’
标头的值,并将请求发送到相应的副本。副本本身也会检查标头以进行冗余。默认情况下,隐私模式副本中的所有日志记录功能都是空操作,除非像 ‘infoUnrestricted’
这样带有后缀,我们会仔细审查这些后缀,以确保永远不会附加任何潜在的代码数据或提示。对于产生后台任务的请求,我们类似地为隐私模式和非隐私模式设置了并行队列和工作副本。这种并行基础设施使我们对隐私模式保证及其抵抗意外错误或漏洞的弹性充满信心。
对于团队级隐私模式强制执行,每个客户端每 5 分钟 ping 服务器一次,以检查用户是否在强制执行隐私模式的团队中。如果是,它将覆盖客户端的隐私模式设置。为了防止客户端的隐私模式 ping 由于任何原因失败的情况,我们的服务器还在热路径中检查用户是否属于强制执行隐私模式的团队,如果是,则即使标头另有说明,也将其请求视为处于隐私模式。在延迟敏感型服务上,我们会将此值缓存 5 分钟,对于任何缓存未命中,我们都假设用户处于隐私模式。总而言之,这意味着当用户加入团队时,他们保证最迟在加入团队后 5 分钟内处于隐私模式。
账户删除
您可以随时在 设置仪表板中删除您的账户(点击“高级”,然后点击“删除账户”)。这将删除与您的账户关联的所有数据,包括任何索引的代码库。我们保证在 30 天内完全删除您的数据(我们会立即删除数据,但我们的一些数据库和云存储的备份不超过 30 天)。
值得注意的是,如果您的任何数据曾用于模型训练(这只会在您当时未处于隐私模式时发生),我们现有的训练模型不会立即重新训练。但是,任何未来训练的模型都不会使用您的数据进行训练,因为该数据已被删除。
漏洞披露
如果您认为自己在 Cursor 中发现了漏洞,请按照我们的 GitHub 安全页面上的指南进行操作,并在那里提交报告。如果您无法使用 GitHub,您也可以通过 security@cursor.com 与我们联系。
我们承诺在 5 个工作日内确认漏洞报告,并在我们能够尽快解决它们。我们将以安全公告的形式在我们的 GitHub 安全页面上发布结果。重大事件将通过 GitHub 安全页面和电子邮件向所有用户通告。