《Cursor文档》-LLM 安全与控制

AI 模型的行为可能出乎意料。本文档介绍如何控制智能体的操作权限、设置安全护栏,以及引导 LLM 实现预期行为。

理解模型行为

LLM 基于概率分布生成文本,而不是从数据库中检索事实或执行确定性逻辑。对于相同的输入,它们可能生成不同的输出,产生看似合理却错误的事实或代码,也可能受到精心构造的提示词 (提示词注入) 的影响。

不能指望 LLM 始终做出安全决策。相反,需要结合两种方法:对智能体可执行操作设定硬性边界的安全控制,以及引导 LLM 行为、促成更好结果的引导机制

如需深入了解 LLM 的工作原理,请参阅AI 模型如何工作

两种安全方案

Cursor 提供两种互补的方法来管理 AI 智能体行为:

安全控制 (确定性执行) :无论 LLM 提出何种建议,都能阻止危险操作的硬性边界。其中包括终端命令限制、拒绝操作的强制执行钩子、批准工作流和沙箱机制。安全控制是防范有害智能体操作的首要防线。

LLM 引导 (非确定性指导) :通过塑造 LLM 的上下文和可执行操作,引导其做出更恰当行为的机制。其中包括为提示词添加指令的规则、提供可复用工作流的命令,以及丰富智能体知识的集成。引导可提升智能体质量,但不能保证阻止有害操作。

请结合使用这两种方法。安全控制提供安全保障;引导则能减少智能体一开始尝试有问题操作的频率。

安全控制

这些确定性控制会严格限制智能体的行为,无论 LLM 提出何种建议,都会生效。

终端命令限制

默认情况下,Cursor 执行任何终端命令前都需要你的批准。这有助于防范破坏性命令 (如删除文件、删除数据库) 、可能暴露敏感数据的命令,以及可能产生意外副作用的命令。

当智能体要运行命令时,你会看到一个显示完整命令的提示词。你可以批准并运行、拒绝,或在运行前修改该命令。

自动批准的风险

您可以为终端命令启用自动批准,但请了解相关风险。智能体可能在您不知情的情况下运行破坏性命令;命令会在您评审前执行;缺陷或提示词注入可能导致非预期操作。

运行模式配置

企业版团队可以在团队仪表盘中配置运行模式策略。在 Cursor 3.6 及更高版本中,最终用户可在 Auto-review 模式 (默认值) 、允许列表运行全部模式之间选择。Auto-review 模式会运行允许列表中的调用,尽可能将 shell 命令置于沙箱中执行,并将其余调用交由 LLM 分类器处理;该分类器会根据安全性以及调用与用户意图的匹配程度决定允许还是阻止。您可以创建无需批准即可执行的命令允许列表,例如 npm installpip installcargo buildmake test

允许列表仅为尽力而为的机制,并非安全边界。恶意智能体或提示词注入可能会绕过它。请始终将允许列表与钩子等其他安全控制结合使用。

有关详细信息,请参阅运行模式Agent 安全性

强制执行钩子

钩子可让您在智能体循环的关键节点运行自定义逻辑。

  • 提交提示词前:在将提示词发送给 LLM 前扫描其中的敏感数据。阻止提交包含 API 密钥或凭据、个人身份信息 (PII) 或专有信息的提示词。
  • 读取文件前:在智能体读取文件前扫描文件。对包含机密信息的配置文件、数据库或日志中的 PII,以及专有算法进行脱敏或阻止访问。
  • 代码生成后:在将生成的代码写入磁盘前进行扫描。检查安全漏洞 (SQL 注入、XSS) 、可能引发知识产权问题的许可代码,以及代码中的 API 密钥和凭据。
  • 执行终端命令前:阻止危险命令,或将其纳入批准工作流。例如,阻止所有 git push 命令,要求任何 sudo 命令都需批准,或阻止数据库 DROP 语句。

示例:阻止 git 命令

此钩子会拦截 shell 命令,禁止直接使用 git,并引导用户改用 GitHub CLI:

#!/bin/bash
input=$(cat)
command=$(echo "$input" | jq -r '.command')

if [[ "$command" =~ git[[:space:]] ]]; then
    cat << EOF
{
  "permission": "deny",
  "userMessage": "Git command blocked. Please use gh tool instead.",
  "agentMessage": "Use 'gh' commands instead of raw git."
}
EOF
fi

示例:遮盖机密信息

此钩子会扫描文件内容,查找 GitHub API 密钥;如发现则阻止访问:

#!/bin/bash
input=$(cat)
content=$(echo "$input" | jq -r '.content')

if echo "$content" | grep -qE 'gh[ps]_[A-Za-z0-9]{36}'; then
    cat << EOF
{
  "permission": "deny"
}
EOF
    exit 3
fi

有关完整文档和更多示例,请参阅 Hooks

保护敏感文件

并非仓库中的所有文件都应向 AI 开放访问权限。配置文件、机密信息和敏感数据都需要保护。

.cursorignore

.cursorignore 文件的作用类似于 .gitignore,但用于控制 Cursor 可以访问哪些内容。匹配 .cursorignore 中模式的文件不会用于:

  • 智能体读取文件
  • 上下文选择

.cursorignore 并非安全边界。它只是一个便捷功能,用于将文件排除在 AI 处理之外,但:

  • 用户仍可手动读取被忽略的文件
  • 智能体可能会设法访问被忽略的内容
  • 它不会阻止文件访问,只会将文件排除在索引之外

如需真正的安全保障,请使用文件系统权限或加密敏感数据。

有关详细语法,请参阅忽略文件

.cursor 目录保护

仓库中的 .cursor 目录包含项目专属的设置、规则和缓存文件。企业版团队可以禁止智能体修改此目录。

启用后,智能体无法:

  • 修改 .cursor/ 中的文件
  • 删除 .cursor/ 目录
  • 更改 Cursor 规则或设置文件

用户仍可手动编辑这些文件,但智能体需要获得批准。

可在团队仪表盘的“.cursor 目录保护”中进行配置 (仅限企业版) 。

浏览器源站控制

企业版团队可以限制智能体使用浏览器工具时可访问的网站。设置已批准域名的允许列表,智能体尝试访问其他源站时将被阻止。

团队仪表盘的“浏览器控制”中配置 (仅限企业版) 。

与 DLP 工具集成

许多企业已部署数据丢失防护 (DLP) 工具,用于扫描敏感数据。您可以通过三种方式将 Cursor 与 DLP 工具集成。

端点 DLP 代理

大多数端点 DLP 软件都能检查 Cursor 的网络流量。请配置 DLP,监控发往 *.cursor.sh 域名的流量,扫描出站请求中的敏感内容模式,并在违反策略时阻止或发出警报。

网络 DLP 可能会影响性能。有关代理相关注意事项,请参阅网络配置

基于钩子的 DLP

使用 Cursor 的钩子功能实现自定义 DLP 逻辑:

提交提示词前:
在将提示词发送给 LLM 前,扫描其中的敏感模式:

#!/bin/bash
input=$(cat)
prompt=$(echo "$input" | jq -r '.prompt')

# 检查是否包含 API 密钥
if echo "$prompt" | grep -qE 'api[_-]?key.*[A-Za-z0-9]{32}'; then
    cat << EOF
{
  "continue": false,
  "userMessage": "Prompt contains what looks like an API key. Remove it and try again."
}
EOF
    exit 1
fi

# 未发现敏感数据则放行
cat << EOF
{
  "continue": true
}
EOF

代码生成后:
在将生成的代码写入磁盘前,先进行扫描:

#!/bin/bash
input=$(cat)
file_path=$(echo "$input" | jq -r '.file_path')
edits=$(echo "$input" | jq -r '.edits[].new_string')

# 检查是否存在硬编码的凭证
if echo "$edits" | grep -qE 'password.*=.*["\047][^"\047]+["\047]'; then
    # 发送到你的 DLP API 进行分析
    curl -X POST "https://dlp.yourcompany.com/scan" \
      -H "Content-Type: application/json" \
      -d "{\"content\":\"$edits\",\"file\":\"$file_path\"}"

    # 检查 API 响应并做出相应处理
fi

第三方 DLP 集成

通过钩子调用您现有 DLP 供应商的 API:

#!/bin/bash
input=$(cat)
content=$(echo "$input" | jq -r '.content')

# 发送到 DLP API
response=$(curl -s -X POST "https://dlp-api.company.com/analyze" \
  -H "Authorization: Bearer $DLP_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"text\":\"$content\"}")

# 解析响应
is_allowed=$(echo "$response" | jq -r '.allowed')

if [ "$is_allowed" = "true" ]; then
    cat << EOF
{
  "permission": "allow"
}
EOF
else
    violation=$(echo "$response" | jq -r '.violation_type')
    cat << EOF
{
  "permission": "deny",
  "userMessage": "Content blocked by DLP policy: $violation"
}
EOF
fi

这种方法可让您集中管理所有开发工具的 DLP 策略。

批准工作流

您可以将 Cursor 配置为:每次智能体执行操作时都要求批准。用户可以将智能体设置为在读取文件、编辑文件、运行终端命令或发起网络请求前始终询问。

不过,这种做法会显著拖慢开发节奏。智能体需要执行多个操作才能完成任务,而每个操作都要求批准会让工作流变得繁琐。大多数团队会选择使用钩子自动阻止危险操作。

模型提供商安全性

所有模型提供商 (OpenAI、Anthropic、Google、SpaceXAI) 都实施了用于过滤有害内容的安全系统。这些系统会拒绝要求提供有害信息的提示词、拒绝生成危险代码,并对输出进行安全过滤。

Cursor 与提供商合作,确保模型在面向用户部署前符合安全标准。提供商会持续评测模型的安全性问题。但这些系统并非安全边界,可能被绕过或欺骗。务必通过钩子和访问策略实施自己的控制措施。

沙箱注意事项

默认情况下,Cursor 智能体在您的本地计算机上运行。它们可以读取您有权读取的文件、写入您有权写入的文件、执行您有权执行的命令,以及访问您有权访问的网络资源。

智能体与您的用户账户之间没有安全边界。如果您的账户可以删除文件,智能体也可以删除文件 (默认需经批准) 。

沙箱选项

如果需要更强的隔离,可通过 Cloud Agents 在独立 VM 中运行 Cursor,使用文件系统权限限制 Cursor 进程的访问范围,或在对生产系统访问受限的专用开发机器上运行 Cursor。

对大多数企业而言,内置的批准要求和钩子已能提供足够的控制。

文件系统权限

为进一步增强防护,请使用文件系统权限保护敏感文件:

限制对包含机密信息的文件的访问:

# 让机密信息仅对特定用户可读
chmod 600 .env
chown app-user:app-user .env

# 或者使用受限访问的独立目录
chmod 700 /etc/app/secrets

隔离敏感仓库:
将高度敏感的代码存放在访问受限的独立仓库中。不要在运行 Cursor 的计算机上克隆这些仓库。

加密文件系统:
对于高度敏感的数据,请使用需要显式挂载的加密文件系统。不要将这些文件系统挂载到 Cursor 可访问的目录中。

LLM 引导

安全控制会在 LLM 提出有害操作后加以阻止。引导机制则从一开始就引导 LLM 提出更好的建议。这类机制不具有确定性,能改善结果,但不能保证完全避免问题。

规则

规则会在每次请求前将指令添加到 LLM 的上下文窗口中。可使用规则设定编码标准、强制执行架构模式、设置安全要求,或定义项目专属约定。

规则分为三个范围:

用户规则:适用于特定用户的所有项目。可用于代码风格或常用库等个人偏好。

项目规则:适用于项目中的所有协作者。可用于命名约定或框架使用方式等项目专属标准。

团队规则:适用于组织内的所有项目。可用于安全要求或合规规则等公司范围的标准。

LLM 在生成响应时会看到所有适用的规则。它会尝试遵循这些规则,但规则只是建议,并非保证。对于必须遵守的要求,请将规则与强制执行钩子结合使用。

有关配置和示例,请参阅规则

命令和工作流

命令将可复用的提示词封装起来,智能体可通过 /test/deploy 等斜杠命令调用。命令有助于统一团队内的常见工作流。

工作流:创建多步骤流程,引导智能体完成复杂任务。例如,/security-review 命令可指示智能体扫描 SQL 注入风险、检查暴露的机密信息、验证输入清理措施,并生成安全报告。

提示词库:为常见任务构建经过验证的提示词集合。这有助于减少智能体行为的差异,并沉淀组织知识。

命令可限定在团队、项目或用户范围内。团队管理员可以创建面向整个组织的命令,供所有开发者使用。

有关配置和示例,请参阅 命令

通过 MCP 丰富上下文

模型上下文协议 (MCP) 服务器可让智能体访问外部数据源。使用 MCP 可引入公司文档、查询内部 API、访问知识库,或集成开发工具。

MCP 可为智能体的上下文补充原本无法获取的信息。例如,MCP 可以提供对 API 规范的访问权限,使智能体能够生成正确调用内部服务的代码。

MCP 适用于团队或用户。与钩子不同,MCP 不会强制执行策略,而是提供信息,帮助智能体做出更好的决策。

有关配置和示例,请参阅 MCP 集成

企业版高级安全控制

联系我们的团队,了解全组织范围的强制执行机制和安全策略。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜