概念●●●5 分钟 · +60 XP
MCP(Model Context Protocol,模型上下文协议)安全:认识工具服务器的风险
MCP 把 AI agent 和强大的工具连接起来——同时也打开了新的攻击面。在连接一个服务器之前,你应该先了解这些风险。
为什么 MCP 会打开一个独立的攻击面
一个 MCP 服务器会给 agent 真正的行动能力:读取文件、发送邮件、查询数据库。一旦你连接了一个服务器,你信任的就不只是它的代码,还有它展示给模型看的每一段文字——包括那些你在连接时往往根本不会去读的描述文字。
Tool poisoning(工具投毒)
一个工具的描述会以文本形式传给模型。恶意服务器可以在里面藏入对你来说不可见、但模型依然会执行的指令——比如额外读取 SSH 配置,再不显眼地塞进某个参数里。模型会把这当成一段正常的工具使用说明来对待。
通过工具结果发起的 prompt injection(提示词注入)
一次工具调用的结果里同样可能带有被篡改的文字,比如某个工具返回了一个精心构造的网页或文档。这些内容会像普通上下文一样进入模型,可能被误解成一条指令。
供应链风险
MCP 服务器大多是别人写的代码,通常来自规模不大的独立项目。一个被入侵的软件包,或者一个心怀恶意的维护者,都可能通过一次更新,事后偷偷植入有害行为——就像其他任何软件依赖一样。
最小权限原则
只连接你信任的服务器,只给它们完成任务真正需要的权限,对有风险的操作手动确认,而不是自动放行。
示例
在连接一个新的 MCP 服务器之前:打开它的源码仓库,在代码里找到真正的工具描述文字,检查其中有没有藏着“IMPORTANT”“ignore previous”这类字眼,或者其他异常指令——而不是仅仅因为它出现在某个推荐服务器列表里,就盲目信任它。
🛠️ 练习——自己动手试试
用最小权限清单,检查一个你正在使用(或想要使用)的 MCP 服务器。
- 打开源代码(如果有的话),阅读真正的工具描述文字,而不只是服务器列表里的简短介绍。
- 检查这个服务器实际请求了哪些权限/资源——它们和这个服务器的任务真正需要的是否一致?
- 检查有风险的操作(写入、删除、网络访问)是需要确认,还是会自动执行。
- 根据这次检查,有意识地决定是否信任这个服务器,或者限制它的权限。
✅ 自查清单
- ☐ 你有没有阅读真正的工具描述,而不只是简短介绍?
- ☐ 服务器请求的权限,和它任务真正需要的权限一致吗?
- ☐ 像写入、删除这样有风险的操作,是否需要确认?
小测验
MCP 服务器里的“tool poisoning attack”(工具投毒攻击)是什么?
来源
- MCP-Spezifikation: Tools (Security Considerations) ↗ modelcontextprotocol.io
- Invariant Labs: MCP Security Notification – Tool Poisoning Attacks ↗ invariantlabs.ai
- Claude Code Doku: MCP verbinden ↗ code.claude.com
- Model Context Protocol: Security Best Practices ↗ modelcontextprotocol.io
- Simon Willison: MCP Prompt Injection Risks ↗ simonwillison.net