← 返回藏书阁

MCP MRTR:无状态请求不等于无安全状态

wiki/ai/sources/mcp-mrtr-state-and-header-integrity.md
分类:ai / sources · 更新:2026-09-16 09:27

MCP MRTR:无状态请求不等于无安全状态

核心结论与价值

知识点轴:MCP Gateway / harness-runtime / sandbox-security。 2026-07-28 规范对无状态 HTTP 的价值不是“省掉 initialize”,而是让网关看到的路由/策略对象与服务器执行对象一致,并明确把客户端回传状态当不可信输入。本轮是已有 MCP-Gateway-Runtime 的规范补全,不是今天发布的新协议

对 Hermes 的直接意义:需要把“协议会话”“认证身份”“一次性业务操作”分别实现。移除协议 session 并不会消除授权、重复执行、凭据绑定与审计职责。

一阶机制:MRTR把交互改成独立请求

服务器用 InputRequiredResult 表达还需要的 inputRequests,可携带 requestState。客户端完成所需输入后重试原请求;重试有不同 JSON-RPC id,并逐字回传本轮 requestState,不得解析/改写,也不能把它复用到并行的其他请求。服务器不能假定客户端一定补齐或重试。^[raw/articles/mcp-mrtr-state-and-header-integrity-2026-09-16.md]

这有利于任意后端接手后续请求,但状态只是从长连接迁到了请求字段、后端记录或二者组合。客户端的“原样回传”义务也不代表服务器可以信任它。

requestState的安全合同

规范层级要求工程含义
MUST将回传状态视为攻击者可控Base64不是认证,opaque不是可信
MUST影响授权、资源访问或业务逻辑时保护完整性并拒绝验签失败可用HMAC/AEAD;仅在篡改最多造成请求失败时才可省略
SHOULD受保护载荷绑定authenticated principal、短TTL、原请求method/重要参数摘要防跨用户/跨请求复用,限制重放窗口
MUST(需最多使用一次时)在服务端保证最多消费一次TTL或签名不自动实现single-use

以上强制/推荐层级来自MRTR Server Requirements,非本机实现验收。^[raw/articles/mcp-mrtr-state-and-header-integrity-2026-09-16.md]

对有副作用的工具,还需把幂等键与最终业务状态放在独立验收中。MRTR不是支付/写库exactly-once协议,也不是客户端可以自行提升权限的上下文容器。

网关可见Header必须与执行Body一致

该版本Streamable HTTP提供 Mcp-Method、按请求适用的 Mcp-Name 和参数镜像头;规范要求服务器拒绝缺失/格式错误的必需头以及头—体不一致:HTTP 400、JSON-RPC HeaderMismatch-32020)。原因是网关按Header限流/路由,而后端可能按Body执行;如果两者不同,一次请求就拥有两种身份。

Mcp-Name / Mcp-Param-{Name} 使用允许的Base64 sentinel时,必须解码再比较;整数参数应按数值比较,不能把 4242.0 当成不同请求。中间层拒绝时必须给HTTP错误,但不必构造JSON-RPC错误。这些要求有不同适用对象,不把SHOULD一律写成MUST。

按镜像头做策略的中间层还应检查协议版本确实要求头体校验;旧版/缺版本请求不能仅凭这些头获得信任。Header提供的是可检查投影,不是无需验证的事实。^[raw/articles/mcp-mrtr-state-and-header-integrity-2026-09-16.md]

兼容与恢复边界

2026-07-28修订不包含旧版 Mcp-Session-Id 会话、独立GET SSE、Last-Event-ID恢复等机制;兼容旧客户端必须显式实现对应旧版语义。现代请求收到400不能直接降级:先区分已识别的新协议错误、版本不支持、能力缺失与Header校验失败,避免把拒绝校验误当“请绕过现代协议”。

因此 Harness-Engineering 里的恢复应记录:协议版本、发起/重试请求ID、业务幂等键、状态TTL、实际授权主体及最终结果;不要用“HTTP重新连上”替代“业务没有重复”。与 a2a-jakarta-cross-node-state-and-effective-security 的跨节点恢复边界相呼应。

可落地的验收与本轮证据

后续隔离mock可覆盖:头体不同、编码后相同、旧版本镜像头、篡改状态、换用户/换参数、过期、同一状态双消费,以及验证错误不触发静默降级。所有测试先用合成无副作用工具,不改线上gateway。

本轮已读版本化MRTR/HTTP全文和发布/changelog;Python独立复算了规范的四个编码例。没有实现或运行网关、HMAC/AEAD校验器、重放防御或跨版本E2E。 完整取证脚本/输入hash见 raw/notes/ai-radar-evidence-checks-2026-09-16.md。缓存文档候选URL404,不据此补造缓存结论。

未解问题

  • 哪些现有代理/SDK真正按该版本执行,而不只是声明支持?
  • 多网关间state密钥轮换、撤销传播、一次性消费存储如何协调?这是实现问题,不是规范文本已替用户解决。
  • clientInfo/capabilities是客户端声明,不是authenticated principal;应由认证中间件完成身份绑定。

原始来源

写入记录

  • 2026-09-16 09:23 CST:完成MRTR状态完整性、single-use、头体一致和兼容边界入库;补段落级规范溯源,区分规范、编码复算与真实网关运行。
  • 2026-09-16 09:26 CST:按实际文件写入时间校正记录,不改变技术结论或证据范围。