首页SEO优化网站建设趣事分享SEM教程常用代码下载网站建设模板网站设计PHP教程Premiere Pro教程建站教程网站优化JavaScript教程图集关注公众号

MCP接口安全怎么做:HMAC签名、重放防护与发布权限清单

MCP接口安全怎么做:HMAC签名、重放防护与发布权限清单

导语:MCP把内容生产工具和网站接口连接起来后,发布动作就不应该只依赖一个简单的URL。接口至少要能确认请求来自可信客户端、请求没有被重放、内容字段符合限制,并且调用者只能执行被允许的操作。

MCP发布接口从Codex客户端经过签名校验到PHP和OSS的安全链路图
MCP发布接口要把客户端、签名校验、业务权限和OSS存储分成不同安全边界。

为什么发布接口不能只靠一个Token

固定Token只能证明“调用者知道某个秘密”,但不能证明请求是刚刚生成的。如果请求被日志、代理或调试信息泄露,攻击者可能重复提交同一个发布请求。因此,Token应该作为HMAC密钥,而不是直接作为URL参数或正文内容传输。

签名材料应包含时间戳、随机Nonce和完整请求体。服务端用同样的规则计算签名,再使用安全比较函数校验结果。

HMAC签名应该覆盖哪些内容

一种简单且容易落地的格式是:timestamp + "\n" + nonce + "\n" + raw_json。这里的raw_json必须是客户端实际发送的字节内容,不能先解析成数组再用另一种格式重新编码,否则同样字段可能因为空格、顺序或转义不同而签名不一致。

$message = $timestamp . "\n" . $nonce . "\n" . $rawJson;
$signature = hash_hmac('sha256', $message, $secret);

时间戳和Nonce如何防止重放

服务端应限制请求时间窗口,例如只接受前后几分钟内的请求。Nonce需要满足长度和字符集校验,并在缓存中保存一段时间;同一个Nonce再次出现时直接拒绝。时间窗口解决“过期请求”,Nonce解决“窗口内重复请求”。

  • 时间戳不应完全相信客户端时钟,服务器要做绝对时间差判断;
  • Nonce不能使用简单递增数字;
  • 缓存失败时不要悄悄放行重复请求。

请求体和发布权限也要校验

签名通过不代表内容可以直接入库。服务端还要限制请求体大小、标题长度、HTML长度和图片类型,并拒绝可执行文件。发布接口最好只允许必要字段,分类和标签通过数据库解析,不接受任意SQL或模板字段。

如果网站环境固定,可以再配置允许IP;如果调用端IP经常变化,就应该把重点放在签名、Nonce、限流和日志审计上。

图片上传和OSS要分开处理

图片应先经过类型、大小和真实图片内容检查,再由PHP转存阿里云OSS。文章里保存最终OSS公网地址,避免把本地临时路径、AccessKey或Token写进正文。封面图和正文图都要在发布后检查可访问性。

总结

一个可用的MCP发布接口,至少需要HMAC签名、时间戳、Nonce、请求体限制、权限隔离、限流和审计日志。安全控制要放在PHP服务端,不能只依赖Codex或客户端自己“按约定发送”。

评论 0

评论功能暂未开放