AI 编程工具不再只接收手工粘贴的一段代码。IDE Agent、CLI、MCP 和团队协作集成可能读取工作区、搜索代码、执行命令、访问网络,并把仓库外的上下文带入任务。
本文解决四个具体问题:
.env和.gitignore能保护到什么程度;- 如何判断代码是否会离开本机、是否用于训练;
- 如何限制 Agent、MCP 和插件权限;
- 密钥已经进入 Git 历史后,应该先做什么。
一、先区分四种容易混在一起的数据
| 数据类型 | 常见位置 | 主要风险 | 建议处理 |
|---|---|---|---|
| 凭证 | .env、配置文件、CI 变量 |
盗用、账单、越权访问 | 独立密钥、最小权限、有效期、额度 |
| 业务代码 | 私有仓库、设计文档、注释 | 商业机密和未发布功能外泄 | 只开放必要目录,确认供应商策略 |
| 用户数据 | 日志、截图、数据库样本 | 个人信息和客户数据泄露 | 脱敏、合成样本、禁止生产数据直传 |
| 工具上下文 | 终端、浏览器、Slack、MCP | 权限从代码扩展到外部系统 | 测试账号、只读权限、任务后撤销 |

2026 年 8 月 21 日,GitHub 发布 Copilot in Slack 公开预览。官方说明该集成可以使用当前对话和被允许访问的 GitHub 上下文。这是一个很直观的例子:AI 编程的上下文边界已经不只在 IDE 内。
二、环境变量解决不了"Agent 读取本地文件"
推荐的 .gitignore 基础规则:
gitignore
.env
.env.*
!.env.example
*.pem
*.key
.env.example 只能放变量名和占位值:
dotenv
DATABASE_URL=postgresql://user:password@example.invalid:5432/app
AI_API_KEY=replace-me
不要把真实值复制进去再提交。
需要明确三个边界:
- 环境变量避免源码硬编码,但本地文件仍可能被有权限的 Agent 读取;
.gitignore只影响未跟踪文件,不能自动删除历史提交;- 前端构建公开变量仍会进入浏览器包,例如 Next.js 的
NEXT_PUBLIC_、Vite 的VITE_,不能存放密钥。
检查 .env 是否被忽略:
bash
git check-ignore -v .env .env.local
列出可能有风险的已跟踪文件名:
bash
git ls-files | rg '(^|/)(\.env(\..*)?|.*\.(pem|key)|id_rsa)$'
该命令只输出文件名,不直接打印文件内容。若系统没有 rg,可使用平台对应的文件名过滤命令。
三、隐私模式不等于"完全本地运行"
评估 AI 编程工具时,应分别核对以下问题:
| 问题 | 需要查的位置 |
|---|---|
| 数据是否离开本机 | 产品架构、安全页、网络和代理文档 |
| 是否用于模型训练 | 数据使用政策、账号隐私设置 |
| 保留多长时间 | 数据保留政策、企业合同 |
| 发送给哪些模型提供商 | 子处理方清单、模型路由说明 |
| 是否支持排除文件 | ignore/exclude 配置文档 |
Cursor 官方安全页是一个可以用于理解这组区别的例子:开启 Privacy Mode 后,用户数据不会用于训练;同一页也说明,应用会向 Cursor 后端域名发起请求,以提供 API、索引、更新和应用市场等功能。
因此,"不用于训练"与"数据不离开设备"是两个不同判断。其他产品也要按当前账号、套餐和功能单独核对,不能套用 Cursor 的结论。
四、Agent 权限必须按动作拆开检查
以 Cursor 当前 Agent 安全文档为例:
- 读取文件和搜索代码无需批准;
- 默认情况下,终端命令需要批准;
- Agent 可以修改工作区文件,配置文件除外;
- 默认设置下,Agent 不能发起任意网络请求。
这些规则是 Cursor 当前文档中的产品行为,不代表所有 Agent 都一样。它说明的是:一个"确认"开关通常只覆盖某类动作,不能替代完整的权限检查。
实际使用时至少分开配置:
- 文件读取范围;
- 文件写入范围;
- 终端命令;
- 网络访问;
- 浏览器会话;
- MCP Server;
- 数据库和云平台凭证。
对于不可信仓库,还要防止仓库内文档、Issue 或代码注释中的提示注入诱导 Agent 执行危险操作。
五、提交前的本地检查
先检查暂存区:
bash
git status --short
git diff --cached --name-only
再使用专门的密钥扫描工具。例如 GitHub 官方文档提到,可以在 pre-commit hook 中使用 git-secrets 或 Gitleaks。Gitleaks 已安装时可运行:
bash
gitleaks git --redact
--redact 可以减少扫描输出再次暴露密钥的风险。CI 和远端仓库还可以启用 Secret Scanning 与 Push Protection。GitHub 官方说明,Push Protection 会在推送时拦截识别出的硬编码凭证,避免其进入仓库历史。

六、密钥已经泄露时的处理顺序
GitHub 的敏感数据清理文档明确建议:如果泄露的是密码、Token 或凭证,第一步先撤销或轮换。
完整顺序建议如下:
- 撤销或轮换旧凭证;
- 检查 API 调用、登录、云资源和账单;
- 从当前代码、配置、日志和文档中删除明文;
- 判断是否需要使用
git-filter-repo重写历史; - 协调分支、Fork 和协作者克隆,防止旧记录重新推回;
- 增加密钥扫描、Push Protection、短期凭证和额度限制。
重写 Git 历史会改变提交哈希,也可能影响分支保护、Pull Request 和其他协作者。不要在没有协调的情况下直接操作共享仓库。
七、可直接执行的六项检查
- 项目按公开、普通商业、强敏感三级分类;
- 核对当前账号的数据训练和保留设置;
- 只向 Agent 开放完成任务所需目录;
- 使用测试凭证、最小权限、有效期和额度;
- 分别限制终端、网络、浏览器、MCP 和插件;
- 提交前检查暂存区并运行密钥扫描。
OWASP LLM02:2025 将敏感信息泄露列为大模型应用的重要风险,并建议在处理前检测和脱敏机密内容。对 AI 编程来说,最有效的做法不是完全拒绝上下文,而是只提供完成当前任务所必需的最小上下文。
标签:AI 编程、隐私保护、API Key、Cursor、GitHub、Agent、MCP、Secret Scanning