Skip to main content

10. 安全考虑 (Security Considerations)

HTTP/3 的安全考虑应与带有 TLS 的 HTTP/2 相当。然而, [HTTP/2] 第 10 节中的许多考虑适用于 [QUIC-TRANSPORT], 并在该文档中讨论。

10.1. 服务器权威 (Server Authority)

HTTP/3 依赖于 HTTP 的权威定义。建立权威的安全考虑在 [HTTP] 的第 17.1 节中讨论。

10.2. 跨协议攻击 (Cross-Protocol Attacks)

在 TLS 和 QUIC 握手中使用 ALPN 在处理应用层字节之前建立目标应用协议。这确保端点对对等方正在使用相同的协议有强有力的保证。

这并不能保证防止所有跨协议攻击。[QUIC-TRANSPORT] 的第 21.5 节描述了 QUIC 数据包明文可用于对不使用认证传输的端点执行请求伪造的一些方式。

10.3. 中间方封装攻击 (Intermediary-Encapsulation Attacks)

HTTP/3 字段编码允许表达在 HTTP 使用的语法中无效的字段名称 (参见 [HTTP] 的第 5.1 节)。包含无效字段名称的请求或响应必须被视为格式错误。

类似地, HTTP/3 可以传输无效的字段值。虽然大多数可以编码的值不会改变字段解析, 但回车符 (ASCII 0x0d)、换行符 (ASCII 0x0a) 和空字符 (ASCII 0x00) 如果逐字转换, 可能会被攻击者利用。

10.4. 推送响应的可缓存性 (Cacheability of Pushed Responses)

推送的响应没有来自客户端的显式请求; 请求由服务器在 PUSH_PROMISE 帧中提供。

当多个租户在同一服务器上共享空间时, 该服务器必须确保租户无法推送他们没有权限的资源的表示。

10.5. 拒绝服务考虑 (Denial-of-Service Considerations)

HTTP/3 连接相比 HTTP/1.1 或 HTTP/2 连接可能需要更大的资源承诺来运行。

发送对等方需要忽略的未定义协议元素的能力可能被滥用, 导致对等方花费额外的处理时间。

不监控此类行为的端点会将自己暴露于拒绝服务攻击的风险中。实现应当跟踪这些功能的使用并对其使用设置限制。

10.5.1. 字段段大小限制 (Limits on Field Section Size)

大型字段段 (第 4.1 节) 可能导致实现提交大量状态。端点可以使用 SETTINGS_MAX_FIELD_SECTION_SIZE (第 4.2.2 节) 设置来通知对等方可能应用于字段段大小的限制。

10.5.2. CONNECT 问题 (CONNECT Issues)

CONNECT 方法可用于在代理上创建不成比例的负载, 因为与创建和维护 TCP 连接相比, 流创建相对便宜。

10.6. 压缩的使用 (Use of Compression)

当压缩在与攻击者控制下的数据相同的上下文中压缩机密数据时, 压缩可以允许攻击者恢复机密数据。HTTP/3 启用字段压缩 (第 4.2 节)。

在安全通道上通信的实现禁止压缩包含机密和攻击者控制数据的内容, 除非为每个数据源使用单独的压缩上下文。

10.7. 填充和流量分析 (Padding and Traffic Analysis)

填充可用于模糊帧内容的确切大小, 并用于缓解 HTTP 内的特定攻击。

10.8. 帧解析 (Frame Parsing)

几个协议元素包含嵌套的长度元素。实现必须确保帧的长度与它包含的字段的长度完全匹配。

10.9. 早期数据 (Early Data)

使用带有 HTTP/3 的 0-RTT 会产生重放攻击的风险。[HTTP-REPLAY] 中的反重放缓解措施必须在使用带有 0-RTT 的 HTTP/3 时应用。

10.10. 迁移 (Migration)

某些 HTTP 实现使用客户端地址进行日志记录或访问控制。由于 QUIC 客户端的地址可能在连接期间更改, 因此此类实现需要主动检索客户端的当前地址或明确接受原始地址可能更改。

10.11. 隐私考虑 (Privacy Considerations)

HTTP/3 的几个特性为观察者提供了随时间关联单个客户端或服务器的操作的机会。这些包括设置的值、对刺激的反应时间以及对由设置控制的任何功能的处理。

HTTP/3 偏好使用单个 QUIC 连接允许关联用户在站点上的活动。