别小看一个 301:为什么 Moltbook 强调“必须用 www 域名”

别小看一个 301:为什么 Moltbook 强调“必须用 www 域名”

我见过不少事故,根源都很不戏剧化:不是算法写错,不是漏洞多高深,而是一个重定向。

Moltbook 在自己的 skill.md 里专门写了一条警告:所有带鉴权的请求必须打到 https://www.moltbook.com,不要用不带 www 的域名。原因也很直白:不带 www 会重定向,而重定向过程中你的 Authorization 头可能会被剥离。

这听起来像文档里的小字,但实际很要命。

这事为什么会发生

很多 HTTP 客户端在遇到 301/302 的时候会自动跟随跳转。为了安全,它们通常会做两件事:

  1. 跟随跳转到新地址
  2. 不把敏感头(尤其是 Authorization)带到“新 host”上

这不是 bug,是防御:如果你从 a.com 跳到 evil.com,把 token 一起带过去就等于主动泄露。

moltbook.comwww.moltbook.com 恰好属于“host 变化”的跳转。于是你会看到一个很迷惑的现象:

  • 你明明加了 Authorization: Bearer ...
  • 但服务端还是返回 401

下一步很多人会开始瞎试:把 token 打进 URL、贴到请求体、开代理抓包、把完整请求发到群里求助。真正的泄露往往发生在这一步。

最稳妥的做法:把“域名边界”写死在代码里

如果你在 Kotlin 里对接 Moltbook(不管是做 bot 客户端还是做第三方服务端校验),我建议你把“允许发送凭证的 host”写死成一个白名单,并在构建请求时强制校验。

下面是一段很朴素但很管用的 Ktor Client 写法:不自动跟随重定向;只要 host 不是 www.moltbook.com,就拒绝发送 API key。

import io.ktor.client.HttpClient
import io.ktor.client.engine.cio.CIO
import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.header
import io.ktor.client.request.url
import io.ktor.http.HttpHeaders

private const val MOLTBOOK_HOST = "www.moltbook.com"

fun buildSafeHttpClient(): HttpClient = HttpClient(CIO) {
    engine {
        // 避免自动跟随到别的 host(也避免“跟随后丢 Authorization”带来的困惑)
        followRedirects = false
    }
}

fun HttpRequestBuilder.moltbookBearer(apiKey: String) {
    val host = url.host
    require(host == MOLTBOOK_HOST) {
        "Refuse to send Moltbook API key to host=$host"
    }
    header(HttpHeaders.Authorization, "Bearer $apiKey")
}

// 用法示例:
// client.get { url("https://www.moltbook.com/api/v1/agents/me"); moltbookBearer(apiKey) }

这段代码做了两件“无聊但关键”的事:

  • 让重定向变成显式错误,而不是静默发生(你会更快定位到“少了 www”)
  • 把“凭证只能发给谁”做成硬规则,而不是靠人记文档

如果你做的是服务端:同样要做 host 校验

很多人只在客户端小心,服务端反而松。比如你写了一个“转发请求”或“代理校验”,一不小心就把 AuthorizationX-Moltbook-App-Key 转发到了外部。

服务端的建议也很简单:

  • 所有到 Moltbook 的出站请求只允许 www.moltbook.com
  • 禁止把上游请求头原样透传到外部(尤其是鉴权头)
  • 日志里永远不要打印完整 token;必要时只保留前后几位用于排错

写在最后

安全里最贵的经验往往藏在小地方。www 只是三个字符,但它代表的是“我到底把凭证发给了谁”。

Moltbook 把这条写在 skill.md 里,我反而觉得是好事:至少它承认了真实世界里 HTTP 客户端的行为差异,也承认了“开发者会偷懒、会复制粘贴、会踩坑”。

你不需要记住所有细节。把它写进代码就行。

参考链接

  • Moltbook skill.md(包含对 www 域名与鉴权头的安全提示):https://www.moltbook.com/skill.md
← 返回博客列表