分享丨简历写了 agent,面试官问:它看到 .env 会怎样?
323
发布于 北京

1784473169-LQqfAY-1784473168943496.jpeg

很多人会答:我在 prompt 里写了,不要读密钥。

不够。

因为 prompt 是建议,不是执行边界。

真正该问的是:读之前,会不会进执行器?

🎯 这题为什么容易翻车?

“看到 .env”其实混了 3 件事:

• 能不能读 .env 文件

• 能不能读 API_KEY 这类环境变量

• 读到后会不会写日志、塞进上下文、甚至外发

模型嘴上说“不碰”,和程序层真的拦住,是两回事。

💡 权限系统该怎么设计?

核心不是让模型更乖,而是:

对一次具体工具请求,程序现在允不允许执行。

FirstCoder 里的链路是:

ToolPermissionSpec

→ PermissionRequest

→ PermissionManager

→ grant 命中?用 grant : 默认 policy

→ ALLOW / ASK / DENY

→ 只有 ALLOW 才进 executor

关键点:

• DENY:直接回 tool result,不执行

• ASK:暂停当前 turn,等用户确认

• 模型不能自己改授权,也不能绕过 registry

所以安全 review 时,优先看这条链,不看 prompt 写得多吓人。

🛡 .env 具体怎么处理?

默认策略大概是:

• 项目内普通文件:通常可读

• .env / .pem / .key:当敏感路径,需要确认

• 名称带 KEY / TOKEN / SECRET / PASSWORD 的环境变量:默认拒绝明文

• 项目外删除:直接拒绝

所以更准确的回答是:

不是“模型想读就能读”

而是:

读 .env 文件 → 敏感路径 → 询问

读敏感 env key → policy 直接拒绝

📌 两个容易忽略的点

1. ASK 不是弹个窗就完了

要保住原来的 tool call。

用户点允许后,执行的必须是刚才那次请求,不能让模型重新说一遍。

2. “本次允许” ≠ “始终允许”

• 本次:只过这一次

• 始终:落到明确 scope(路径 / 命令前缀 / host / env key)

不能存成一句模糊的“以后都行”

📚 一句话总结

prompt 负责引导行为

permission 负责阻止越权执行

agent 的能力边界,最后一定落在执行链上。

🔗 开源地址

https://github.com/KomorGiaoGiao/FirstCoder

想看实现优先翻:

permissions/ 和 permission_registry.py

欢迎 star⭐,也欢迎对着代码挑刺。

1784473202-IxfKIk-1784473201413632.jpeg

评论 (0)