我找到了一个响应,其中具有相同值的应用程序使用重复的标头 . 任何人都可以告诉我,这是一个很好的编程实践还是用于安全角度或其他任何东西?
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标头 .
1 回答
这是编程/配置错误 . RFC 7230 (Section 3.2.2)说:
所以使用这样的多个 Headers :
是未定义的行为 . 同一部分说:
因此,对上述 Headers 的一种可能解释是:
根据https://tools.ietf.org/html/rfc6797#section-6.1,这是无效的语法,可能会被拒绝(因此,不会应用HSTS策略) .
请注意,并非所有实现都可能遵循此指定的行为 . 例如,Python http库只返回一个 Headers 列表,在上面的例子中它可能如下所示:
根据实施情况,至少这三种行为是可能的:
合并标头,以逗号分隔(由RFC 7230指定) .
使用第一个 Headers 匹配 .
使用最后一个 Headers 匹配 .
验证和使用之间的解释不匹配可能会导致攻击,尽管HSTS标头可能不会非常严重 .