URL 的结构比表面看起来的要复杂得多

目的地包括方案、主机、可选端口、路径、查询和片段。将其视为任意字符串会使验证不一致,并可能引入不安全或令人惊讶的行为。

使用经过测试的 URL 解析器对完整值进行一次解析,然后对结构化的解析结果应用规则。

服务器请求中不应包含片段

浏览器将片段保留在哈希符号之后,并且不将其发送到目标服务器。重定向服务可以保留它以供客户端导航,但是当平台的合约将片段视为本地 UI 状态时,平台可能会故意删除片段。

无论选择哪种策略,都应确保其可见且经过测试。将哈希值静默编码到路径中会改变目标地址,这是一种常见的规范化错误。

私人目的地需要特别关照

当平台还会获取预览或执行健康检查时,回环、私有、链路本地和内部主机可能会带来安全风险。在存储之前将其拒绝,可以简化安全边界。

在隔离的请求器中,主机名解析需要进行额外的检查,因为看似公共的主机名随后可能会解析为私有地址。仅靠字符串验证并不能完全防范 SSRF 攻击。

开发者 API · 当前访问权限和限制