使用具有相同值的重复响应头是否可以?

问题描述 投票:2回答:1

我找到了一个响应,其中具有相同值的应用程序使用重复的标头。任何人都可以告诉我,这是一个很好的编程实践还是用于安全角度或其他任何东西?

  
     HTTP/1.1 200 
     Accept-Ranges: bytes
     Cache-Control: no-cache, must-revalidate, private
     Content-Type: text/html
     Date: Mon, 20 Nov 2017 04:08:51 GMT
     Expires: 0
     Last-Modified: Thu, 16 Nov 2017 14:04:48 GMT
     Pragma: 
     Public-Key-Pins: pin-sha256="5w0XrTCAbsVO7vTngDViNHPutlvB43qYionPbpV2ky0=";  
     max-age=5184000; includeSubDomains;
     Server: Any
     Set-Cookie: ********************* httponly; secure; path=/
     Strict-Transport-Security: max-age=31536000 ; includeSubDomains
     Strict-Transport-Security: max-age=31536000; includeSubDomains
     X-Content-Type-Options: nosniff
     X-Content-Type-Options: nosniff
     X-Frame-Options: SAMEORIGIN
     X-Frame-Options: SAMEORIGIN
     X-XSS-Protection: 1; mode=block
     Content-Length: 559
     Connection: Close

此应用程序使用具有相同值的重复X-Content-Type-Options标头,Strict-Transport-Security,X-Frame-Options标头。

security http-headers httpresponse penetration-testing application-security
1个回答
2
投票

这是编程/配置错误。 RFC 7230 (Section 3.2.2)说:

发件人不得在邮件中生成具有相同字段名称的多个标题字段,除非该标题字段的整个字段值定义为以逗号分隔的列表[即#(值)]或标题字段是否为已知异常(如下所述)。

所以使用这样的多个标题:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Strict-Transport-Security: max-age=31536000; includeSubDomains

是未定义的行为。同一部分说:

收件人可以将具有相同字段名称的多个头字段组合成一个“field-name:field-value”对,而不改变消息的语义,方法是将每个后续字段值按顺序附加到组合字段值,由a分隔逗号。

因此,对上述标题的一种可能解释是:

Strict-Transport-Security: max-age=31536000 ; includeSubDomains, max-age=31536000; includeSubDomains

根据https://tools.ietf.org/html/rfc6797#section-6.1,这是无效的语法,可能会被拒绝(因此,不应用HSTS策略)。

请注意,并非所有实现都可能遵循此指定的行为。例如,Python http库只返回一个标题列表,在上面的例子中它可能如下所示:

[
    # ...
    ('Strict-Transport-Security', 'max-age=31536000 ; includeSubDomains'),
    ('Strict-Transport-Security', 'max-age=31536000; includeSubDomains')
    # ...
]

根据实施情况,至少这三种行为是可能的:

  • 合并标头,以逗号分隔(由RFC 7230指定)。
  • 使用第一个标题匹配。
  • 使用最后一个标题匹配。

验证和使用之间的解释不匹配可能会导致攻击,尽管对于HSTS标头可能不会非常严重。

© www.soinside.com 2019 - 2024. All rights reserved.