MCP 服务器安全责任模型定义解析(详解 Anthropic 对第三方服务器的审查边界)

MCP 协议本身在「协议层不强制安全」,责任被显式分配到「主机—客户端—服务器」三层。其中主机是策略权威,客户端是策略执行者,服务器默认不可信;Anthropic 对接入官方目录的第三方服务器做上架审核,但不承诺对源码做安全审计,部署方的安全评估义务在协议文本与官方条款中都被写明,不是模糊地带。

一、协议层明确不强制安全

MCP 规范在多处写到:协议在协议层不强制安全机制,认证授权、令牌校验、来源校验等都需要在协议之外的实现层处理。这意味着:即便客户端与服务器都遵循协议,也不能默认「协议合规=安全」,需要部署方额外搭建 OAuth 2.1、令牌受众校验、来源校验等控制。这一原则决定了 MCP 的安全是「应用层责任」而非「协议层兜底」。

协议文档把责任分到三层:主机(Host,如 Claude Desktop、IDE)负责安全策略、用户同意、服务器白名单;客户端(Client)是协议层连接器,与服务器一一对应,只承担「握手与转发」职责,不替主机做策略;服务器(Server)默认不可信,提供的能力(工具、资源、提示)都需要被主机侧校验后才暴露给模型。

下面这张表把每层的职责与不可做的事都列清楚:

层级 可信度 核心职责 不可做的事
主机 完全可信 服务器白名单、用户同意、工具调用审批 把策略推给客户端或服务器
客户端 协议可信 能力协商、消息转发、保持 1:1 连接 跨服务器拼装请求、缓存凭据
服务器 默认不可信 暴露工具/资源/提示、声明能力 绕过主机审批、自行决定权限

把这张图记在脑子里,任何 MCP 部署方案的「谁来负责」问题都能在三十秒内对位。

二、Anthropic 的审查范围:上架审核而非源码审计

Anthropic 在 Connectors Directory 的官方政策中明确:目录收录的是「经过挑选的第三方 MCP 服务器」,团队对提交内容做初始与持续审查,可能要求开发者解决合规问题后才能保留收录资格。审查维度覆盖「安全、防护与兼容性」三项标准,并要求服务器持续符合使用政策与高风险用例要求。

这层审查不等于源码安全审计。BeyondScale 等第三方解读明确指出:Anthropic 在收录前对照上架准则做审核,但不对 MCP 服务器源码做安全审计,也不提供运行期安全保证,部署组织需独立完成安全评估。这与 Anthropic Connectors 政策中的合规检查是不同维度:前者偏「是否符合目录收录标准」,后者是「是否能在生产环境安全运行」。

Anthropic 的开发者条款还要求提交者(i)声明并保证对所提交服务器拥有所有必要权利且符合法规;(ii)同意赔偿 Anthropic 因服务器或用户交互产生的索赔;(iii)授权 Anthropic 对服务器做安全测试、收集功能元数据并与用户共享;(iv)实施漏洞接收机制并以合理谨慎调查。这些条款在合规侧强化了「服务器开发者担责」的取向,把运行期风险明确划到部署方与开发者一侧。

三、信任模型文档的硬性措辞

MCP 官方在 SECURITY.md 中给出明确的「信任模型」文档,核心是三条:

  1. MCP 客户端信任它连接到的 MCP 服务器,前提是用户或管理员按配置正确选择了该服务器;
  2. 本地 MCP 服务器像「用户主动安装的其他软件」一样被信任,运行它的用户要把它的访问范围视同自己账号的访问范围;
  3. MCP 服务器信任它所在的执行环境,服务器能访问哪些资源由运行环境决定,这意味着容器化、最小权限、隔离目录是部署方的硬性要求。

同一份文档还把几类行为明确归为「非漏洞」:STDIO 传输启动子进程是设计意图、文件读写与 git 命令是服务器「本职工作」、LLM 自行决定调用哪个工具属正常行为。这意味着提交到 HackerOne 的「任意命令执行」「服务器能改文件」类报告,通常不会被认定为可奖励漏洞,因为它们在协议信任模型内属于预期行为。

理解这一点对部署方很关键:既然协议不把这些列为漏洞,那防护就不能依赖「上游打补丁」,而必须自己在主机侧用白名单、沙箱、最小权限把这些行为卡死。

四、责任边界的工程落地

把责任模型落到工程,主机侧需要四件套:服务器白名单、用户同意 UI、工具调用审批、SIEM 日志接入。客户端侧需要按协议实现能力协商与转发,不要替服务器缓存凭据。服务器侧需要把工具描述、参数 schema、错误处理都写完整,并假设「客户端可能传恶意输入」,在服务器端做严格 schema 校验与 SQL/命令参数化。

容器化是承载这套模型的物理层。一个常见的反模式是把 npx -y @modelcontextprotocol/server-filesystem / 写进配置,这等于把整块磁盘交给服务器,违反最小权限。生产配置应把参数里的路径限定到当前项目目录,配合容器 bind mount,即便服务器有漏洞也越不出 mount 范围。远程 MCP 服务器则应使用 OAuth 2.1 + PKCE,并校验 token 的 audience 声明,只接受发给自己的令牌。

下面给出一段典型的服务器启动配置片段,展示如何用容器化 + 受限路径来落地「最小权限」:

{
  "mcpServers": {
    "filesystem": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-v", "${WORKSPACE}:/data:ro",
        "mcp/filesystem:latest",
        "/data"
      ]
    },
    "remote-tool": {
      "url": "https://mcp.example.com/v1",
      "auth": {
        "type": "oauth2.1-pkce",
        "audience": "https://mcp.example.com"
      }
    }
  }
}

这段配置把宿主机工程目录以「只读」形式 bind mount 进容器,服务器进程只能看到挂载的子目录;远程调用走 OAuth 2.1 + PKCE 并校验 audience,避免凭据被串用到其他服务。生产环境还应在容器运行时加 --read-only、--security-opt=no-new-privileges、--pids-limit=256 等限制,把进程级风险也卡死。

日志侧需要把工具调用、参数、用户、会话都记录并接入 SIEM;对「写、删、扣款、触达生产」等高风险动作默认拒绝,需用户显式确认才执行。这些是责任模型从「写在文档里」过渡到「运行时能观测、可回溯」的关键动作。

五、常见误读与纠正

误读一:「Anthropic 收录=安全」。实际只是通过目录上架标准的合规检查,不是源码审计,部署方必须独立评估。误读二:「协议合规=安全」。协议层不强制安全,OAuth、令牌校验、SSRF 防护、prompt 注入扫描都是协议外的实现层责任。误读三:「容器化就够了」。容器只提供文件系统与进程隔离,网络策略、seccomp、AppArmor、依赖签名仍需配套。

把这三条记在部署手册的第一页,就能避免把责任模型误当成「上游兜底」。Anthropic 的角色是协议维护者与目录运营方,不是部署方的安全承包方,这一定位在条款与安全文档里都写得很清楚。

常见问题(FAQ)

Q1:协议层不强制安全,那协议本身还安全吗?

协议只定义消息格式与能力协商,认证授权需在协议外的实现层处理。

Q2:Anthropic 对第三方 MCP 服务器做源码审计吗?

目录收录前做上架审核,不对源码做安全审计,部署方需独立评估。

Q3:服务器侧还需要做输入校验吗?

必须做,协议信任模型明确服务器默认不可信,客户端传来的参数必须按 schema 严格校验。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
参数猎人的头像参数猎人认证作者

相关推荐

返回顶部