阻止编程助手读取密钥要靠权限控制
文章区分提示词约束与工具强制权限,说明 .gitignore 无法阻止编程助手读取本地密钥。分别介绍 Claude Code、Cursor、Codex 的访问限制方式及缺口,并建议将生产密钥移出工作目录。
原文暂未完整获取,基于公开信息的快读
把 .env 写进 .gitignore,或在 AGENTS.md 里要求「不要读取密钥」,都不能构成编程助手的访问边界。dev.to 的这篇文章区分了模型遵循的文字指令与工具执行的权限限制,并讨论 Claude Code、Cursor、Codex 的防护方式。当前节选主要展开了 Claude Code,另外两款工具的细节还不完整。
目前能确认什么
.gitignore 管的是 Git 忽略规则,不会撤销本地进程读取文件的权限。CLAUDE.md、AGENTS.md 和 Cursor rules 则用于指导模型行为,不能直接改变工具允许执行的操作。
提示词约束不能替代工具层的权限控制。
据节选,Claude Code 可以通过 permissions.deny 配置 Read deny rules,但文件工具的限制仍有覆盖缺口:脚本自行打开文件、递归搜索内容等路径,需要进一步依靠沙箱(sandbox)限制。作者还指出,hooks、MCP servers 等运行在该沙箱之外,不能把开启沙箱理解为所有执行入口都受保护。
Cursor 部分确认提到了 .cursorignore,用于限制 Agent、Tab 和 @ 引用访问文件;摘要另提到终端命令需要 hook 配合。Codex 只明确提到了带 deny globs 的 permission profile,节选没有给出完整配置。
我的判断
程序员排查密钥暴露路径时,应该分别检查文件读取、终端命令和扩展进程。只验证助手拒绝直接打开 .env,还不足以证明脚本也读不到它。
生产密钥应移出工作目录,但移走文件后,仍要检查执行进程能否从其他路径或环境变量拿到密钥。
具体配置暂时不能照着摘要补全。Cursor 的终端 hook 如何拦截、Codex 的规则覆盖哪些入口,都要等完整内容或官方文档确认。Claude Code 节选也明确提到了平台差异和路径匹配陷阱,因此更有价值的验收标准是:直接读取和脚本间接读取,都确实被权限层阻止。