跳到主要内容

7.4.3. Message Component Source and Context (消息组成部分来源与上下文)

7.4.3. Message Component Source and Context (消息组成部分来源与上下文)

推导消息组成部分值的签名上下文包括目标 HTTP 消息本身, 任何关联消息 (如触发响应的请求), 以及签名者或验证者可访问的附加信息. 签名者与验证者在为签名基创建组成部分值时都需要仔细考虑所有信息的来源, 注意不要从不可信来源获取信息. 否则攻击者可能利用松散定义的消息上下文将其自己的值注入签名基字符串, 覆盖或破坏预期值.

例如, 多数情况下消息的目标 URI 如 [HTTP] 第 7.1 节定义. 然而, 假设某应用需要签名传入请求的 @authority, 但处理应用位于反向代理之后. 此类应用会预期 @authority 值变更, 可配置获知客户端在代理另一侧看到的外部目标 URI. 该应用会将此配置值用作推导 @authority 等消息组成部分值的目标 URI, 而非传入消息的目标 URI.

此方法并非没有风险, 错误配置的系统可能接受针对不同系统组件意图的签名请求. 对此场景, 中间人可以如第 4.3 节演示添加自己的签名供应用直接验证. 该替代方法需要更主动的中间人, 但较少依赖目标应用知晓外部配置值.

另一示例, 第 2.4 节定义签名响应消息的方法, 同时纳入触发响应的请求消息的部分. 此情况下, 组成部分值计算的上下文是响应与请求消息的组合, 而非仅应用签名的单一消息. 对此功能, req 标志允许签名者明确标识为组成部分标识符的值引用上下文的哪一部分. 实现需要确保对每个组成部分引用预期消息, 否则攻击者可能试图通过操纵任一侧破坏签名.