返回技术博客
Agent 越能干越危险:MCP、代码执行、密钥和沙箱怎么防翻车

Agent 越能干越危险:MCP、代码执行、密钥和沙箱怎么防翻车

Agent 越能干越危险:MCP、代码执行、密钥和沙箱怎么防翻车

Agent 安全边界示意图

AI Agent 最大的价值,是它不只会回答问题,还能调用工具、读写文件、执行命令、访问数据库、操作浏览器,甚至修改生产系统。

这也是它最大的风险。

一个只能聊天的模型,最多给出错误建议。一个能执行命令的 Agent,可能真的删文件、泄露密钥、提交错误代码、调用危险接口,或者把内部数据发送到不该去的地方。

所以 Agent 安全的核心不是“模型会不会出错”,而是:它出错时,最多能造成多大损失。

第一条边界:权限最小化

很多团队接入 Agent 的第一步,就是给它一个很大的权限:整个代码库、完整终端、所有环境变量、浏览器登录态、数据库连接。

这很方便,也很危险。

正确做法是把权限拆小:

  • 只给需要的目录读写权限。
  • 默认不暴露生产密钥。
  • 危险命令需要确认。
  • 数据库优先只读。
  • 外部网络访问要有白名单。
  • 生产环境操作必须人工审批。

Agent 不是人,它不会天然理解“这个命令虽然能跑但不该跑”。权限边界必须由系统保证,不能只靠 prompt 约束。

第二条边界:MCP 工具不是越多越好

MCP 让模型连接外部工具变得更标准,这是好事。但每接一个 MCP server,本质上就是给 Agent 多开一扇门。

常见风险包括:

  • 工具描述被误解,模型调用了不该调用的能力。
  • MCP server 读取了过多本地文件。
  • 工具返回的数据里混入 prompt injection。
  • 连接内部系统后,Agent 误操作真实业务数据。
  • 第三方 MCP server 自身不可信。

所以 MCP 工具要分级管理:

  • 低风险:只读文档、搜索、格式转换。
  • 中风险:读内部数据、查询数据库、访问代码仓库。
  • 高风险:写文件、发消息、提交 PR、改数据库、部署系统。

高风险工具不要默认开放,至少要有确认、日志和回滚方案。

第三条边界:密钥永远不要随便进上下文

Agent 很容易接触到密钥:环境变量、配置文件、CI 日志、.env、云平台 token、Webhook 地址、数据库密码。

一旦密钥进入模型上下文,就可能被记录、转发、写进文件、出现在日志里,或者在后续任务中被误用。

建议做几件事:

  • .env、私钥、token 文件默认加入 Agent 忽略列表。
  • 执行命令时过滤敏感环境变量。
  • 日志输出做 secret masking。
  • 只给短期、低权限 token。
  • 对外部工具调用做数据脱敏。
  • 定期轮换 Agent 使用过的凭证。

不要用一句“不要泄露密钥”的 prompt 当安全方案。prompt 是提醒,不是隔离。

第四条边界:代码执行必须进沙箱

Coding Agent 必然要执行命令:安装依赖、跑测试、生成文件、启动服务。问题是,命令执行是高危能力。

风险可能来自三个地方:

  • 模型自己生成了危险命令。
  • 项目脚本里本来就有危险行为。
  • 依赖安装时触发供应链风险。

因此,团队使用 coding agent 时,最好把执行放进沙箱:

  • 用临时工作区,而不是直接操作主目录。
  • 用容器或隔离用户执行命令。
  • 限制网络访问和文件系统范围。
  • 对包安装、部署、删除命令加确认。
  • 每次任务结束后清理环境。

沙箱的目标不是让 Agent 永远不犯错,而是让它犯错时影响范围可控。

第五条边界:所有关键操作都要可审计

Agent 安全还有一个经常被忽略的问题:出了事之后,你能不能复盘?

至少要记录:

  • 用户给了什么任务。
  • Agent 读取了哪些文件。
  • 调用了哪些工具。
  • 执行了哪些命令。
  • 修改了哪些文件。
  • 哪些操作经过人工确认。
  • 最终产物和 diff 是什么。

没有审计日志,Agent 就像一个动作很快但不留痕的外包。短期看效率高,长期看风险大。

一个实用的 Agent 安全分级

可以把 Agent 使用分成四级:

级别 能力 安全要求
L1 只读问答 数据脱敏、引用来源
L2 读代码/读文档 限制目录、禁止密钥
L3 写文件/跑测试 沙箱、diff review、命令确认
L4 改数据库/部署/发消息 人工审批、审计日志、回滚方案

大多数团队可以从 L2/L3 开始,不要一上来就把 L4 能力交出去。

对个人开发者的建议

个人使用 Agent,也不要太随意。

至少做这些:

  • 不要让 Agent 读取包含密钥的目录。
  • 重要仓库先 commit,再让 Agent 修改。
  • 看 diff,再执行危险命令。
  • 不要把生产数据库连接给 Agent。
  • 不要让未知 MCP server 访问全盘文件。
  • 给常用 Agent 单独建工作目录。

个人电脑里的 SSH key、云平台 token、浏览器登录态,价值可能比你想象得高。

对团队的建议

团队要把 Agent 当成一种新型自动化执行者,而不是普通聊天工具。

建议建立这些制度:

  • Agent 权限矩阵。
  • MCP server 白名单。
  • 密钥和敏感文件策略。
  • 沙箱执行环境。
  • 操作审计和日志留存。
  • PR/diff review 流程。
  • Agent 输出的测试和评测基线。

如果团队已经允许 Agent 写代码、跑命令、提交 PR,那么它就已经进入工程治理范围了。

结论

Agent 越强,越不能只靠信任。

真正安全的 Agent 系统,不是模型永远不会犯错,而是系统提前假设它会犯错,并把损失限制在可接受范围内。

一句话总结:把 Agent 当成一个高效率但需要隔离的执行者,而不是一个永远可靠的同事。

当你开始接入 MCP、开放代码执行、暴露内部数据和密钥时,安全边界就不是可选项,而是 Agent 能否进入生产环境的前提。

参考来源