全球7000种编程项目,有多少在第一天就配对了安全基线?
我这周坐下来搭建一个新项目。本来很简单:接入Cloudflare Workers AI管道,设几个环境变量,然后开始发布。但这次我想从第一天就把安全做对——而不是事后手忙脚乱地打补丁。
![]()
几周前,Vercel的安全漏洞迫使我给一个现有项目轮换凭证。翻遍文件、检查哪些暴露了、祈祷没漏掉什么——这不是你想怎么度过下午的方式。这件事推动我写了一篇关于密钥管理的文章:一套在AI智能体读取代码时保护密钥的系统。那篇文章是理论。这篇是第一次把它应用到全新项目上的样子。
在那次事件之前,我都是在凑合。大多数项目靠.gitignore和运气。我知道Claude和Cursor这样的智能体能索引整个仓库。我只是没认真想过,如果它们打开错文件会发生什么。
这次不是为了上线功能。是为了搭建一个足够"无聊"的基线——无聊到大多数人会直接跳过它。以下是我实际配置的内容。
AI编码工具强大是因为它们有上下文。它们能看到你的文件树、导入语句、配置文件。当这些上下文包含真实密钥时,这种能力就变成了 liability。
我正在初始化content-creator仓库来调用Cloudflare Workers AI,这意味着需要在本地存放API密钥和账户ID。最明显的位置是.env.local。不那么明显的问题是:如何确保没有智能体读到它。
Git忽略不够。Git能把文件排除在提交之外,但无法阻止AI助手打开就放在工作目录里的文件。我需要的是智能体级别的阻断,而不仅是版本控制。
我最终创建了三道具体护栏。
第一道,.claude/settings.json配合denyList。这能阻止Claude Code对.env.local执行Read或Bash(cat)操作。这里需要小心,因为我希望智能体仍能读取.env.example来获取变量名。denyList专门排除了.env.example,同时阻断.env.local和.env.*.local。
配置中同时阻断三类操作:直接读取、shell回显、以及针对存放实时凭证的特定变量的printenv命令。一个文件承担三项职责。
第二道,每个AI工具都有自己的文件忽略方式。比如Cursor的索引器不使用.gitignore,所以需要.cursorignore文件。如果你用其他工具,去查它如何处理上下文排除。模式到处都一样:按名称告诉智能体不要读取什么。
第三道,AGENTS.md。我添加了一条明确规则,告诉智能体绝不能输出.env*文件中的值。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.