安全说明

  • 生产环境对外的 public_url、auth.issuer 和远端 backend URL 使用 HTTPS。allow_insecure_http 只允许 loopback 后端,不能把远端明文连接变成合法配置。
  • public_url 必须出现在 token 的 aud 中:aud 为字符串时等于 public_url,为数组时包含 public_url;TLS 终止或反向代理后仍要保留公开的 host 和路径,并正确转发 RFC 9728 的两个 metadata 地址。
  • 使用精确的 allowed_origins,不要把不受信任的控制台加入列表;Origin 和预检头均有严格 allowlist,预检只允许 POST(由 OPTIONS 返回响应)。
  • 把 client secret、API key、静态 Authorization 等放在环境变量或外部 secret store,不要提交 YAML。静态 header 会发送到后端数据面,请避免把敏感值写入日志或能力名。
  • 配置校验会拒绝换行头、重复头和 transport 管理头(包括 Proxy-Authorization、Proxy-Authenticate);OAuth 模式会拒绝静态 Authorization,避免认证来源互相覆盖。
  • 超长或无效的 request ID 会重新生成;日志中的 request/trace 值会限长或哈希,能力名和资源 URI 字段会校验并脱敏;请求失败只记录外部错误类型,不记录外部错误原文。
  • /healthz、/readyz 和 metadata 不要求 Bearer;应在网络层限制管理面可见范围。MCP 入口只接受 Authorization header 的 Bearer JWT。
  • MCP 监听器的所有 HTTP 路由在 request body 被消费或关闭前都保持 request_timeout 读取 deadline,因此未认证或被拒绝请求的慢 body 也有界。subscriptions/listen POST 只有在 body 读完后才不受普通 response 写入和 request context timeout 限制。
  • 后端 SSE 响应保持 streaming passthrough。progress 检查每个 event 最多缓存 1 MiB;超大 event 原样转发但跳过 progress 检查。
  • 已确认的 2026 resource subscription ID 会把更新映射回原订阅 URI,包括 update event URI 不同的情况;timeout、取消订阅和 session/重连清理会删除映射。
  • 内建本地管理要求账号登录,且只允许数字回环地址;远程管理模式要求独立 audience 和管理员 scope,使用 HTTPS、精确 Host/Origin、Cookie CSRF 校验和严格 CSP。
  • MCPHUB_CONFIG_KEY 应放在 YAML 和数据库备份之外安全保存。SQLite 文件权限为 0600,但恢复其中 Secret 必须保留完全相同的 32 字节密钥。