Watch-IP 安全性与 API 密钥管理
本页说明 Watch-IP API 当前实际实现的访问控制:两种密钥类型的工作方式、来源如何被强制校验、密钥如何轮换或撤销,以及如何报告安全问题。本页并未声称已获得合规认证或独立安全审计——截至撰写本文时,尚未完成任何此类审计。
两种密钥类型,两种不同的控制方式
公开可用密钥(用于 GET /v1/geo 与 POST /v1/email/validate)设计为在浏览器代码中运行,因此并不保密——真正的控制手段是为该密钥配置的允许来源列表,会与请求的 Origin/Referer 请求头进行比对。私密密钥(用于 GET/POST /v1/lookup 与 POST /v1/risk/check)是服务器到服务器的凭据,完全不进行来源校验,因为后端调用中不存在浏览器的 Origin 请求头;请将私密密钥当作数据库密码来对待,而不是可公开的标识符。各密钥类型所需的请求格式请参阅身份验证。
来源锁定如何被强制执行
来自不在密钥允许列表中的来源的公开可用密钥请求,会收到 403 响应,且不会设置 Access-Control-Allow-Origin 请求头。浏览器在您页面的 JavaScript 能够读取该响应之前就将其拦截,这才是真正的强制机制——JSON 错误响应体只是次要部分。来源锁定并不会使密钥本身变得保密,也无法阻止非浏览器客户端发送伪造的 Origin 请求头;它专门保护的是浏览器调用这一面。
传输与存储
发往 API 与控制台的流量在传输过程中均经过加密(TLS/HTTPS);对于需要密钥身份验证的请求,API 不接受明文 HTTP。API 密钥以哈希形式(SHA-256)存储,而非明文,因此仅数据库泄露本身并不会暴露可用的密钥值。
轮换与撤销
您可以在控制台中撤销或轮换密钥。撤销并非在所有环节都是即时生效的:密钥有效性在一次查询后最多会被缓存 5 分钟,因此一个已撤销的密钥在撤销后最多仍可能被接受 5 分钟——在评估怀疑遭到泄露后能多快切断访问权限时,请将这一点纳入考虑,对于时间敏感的事件,应主动轮换密钥,而不是仅依赖撤销操作。
速率限制
每个密钥都会按客户账户在固定的一分钟窗口内进行速率限制,该限制在您调用的所有端点之间共享——而不是按路由单独计算配额。这可以限制单个泄露或被滥用的密钥在短时间窗口内所能造成的损害,但它本身并不能替代对已泄露密钥进行轮换。
报告安全问题
如果您认为某个密钥已被泄露,或在 API 或控制台中发现了安全问题,请发送邮件至 security@watch-ip.com。我们目前尚未运行公开的漏洞赏金计划,也未持有第三方安全认证——如果这一情况发生变化,本页面会附上具体日期加以说明,而不是仅展示一个徽章。