使用具有相同值的重复响应标头很好吗?



我找到了一个响应,该响应由应用程序相同的应用程序使用。谁能告诉我,这是一个很好的编程惯例,还是用于安全性观点或其他任何东西?

 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标头,严格的传输 - 安全性,具有相同值的X-Frame-Options标头。我在Stackoverflow上发布了这个问题,但没有找到任何回答。

来自rfc2616

当该标头字段的整个字段值被定义为逗号分隔列表[即,#(values)]时,可能会在消息中存在多个具有同一字段名称的消息标头字段。必须将多个标头字段组合到一个"字段名称:字段值"对中,而无需更改消息的语义,通过将每个后续的每个字段值附加到第一个,每个字段值都以逗号分隔。因此。

so

Cache-Control: no-cache
Cache-Control: must-revalidate
Cache-Control: private

可以。我不相信这里适用。如果具有重复的标题条目有效,则将取决于每个标头是否允许具有重复值。

从安全的角度来看,如果这些行不合法,则无法定义客户对他们的行为 - 因此忽略它们可能是一个有效的选择。因此,我认为和糟糕的做法也是一种风险。

从实际的角度来看,我可以想象有几种方法来处理此问题。

  • 显而易见的选择是他们只需遇到他们遇到的第一个或最后一个条目。看到这些是重复的,这不是问题。
  • 安全的选项是错误。
  • 更聪明的选择是将同时传递给处理程序并决定。即,对于基于安全的标头,始终使用更严格的值。
  • 另一种选择是将标头加入CSV并将其传递给处理程序 - 这将涵盖合法的重复标题案件。
  • 最坏的情况是客户忽略标题。

如果复制标头很好以及如何解释它取决于标题的确切语义。
Content-Encoding这样的一些标题是累积的,即所有值都将被放在一起(至少在理论上,实践可能有所不同)。在这种情况下,具有相同值的多个标头当然不同于拥有一个标头。
其他标题是单例,最多应该发生一次。通常,如果相同的标头和值多次为单例发送了相同的标头和值。但是我不会依靠它,因为它仍然无效。如果相同的标头多次以不同的值发送,则客户的行为会有所不同(也可能取决于标题):有些选择特定的标头(即首先或最后一个),而其他人则将响应视为损坏,因为多个解释可能会导致安全问题。

正确的行为(按照RFC)是要附加标题是列表(例如Cache-Control)或生成错误。

实际上,互联网是一种狂野的鹅,正如斯特芬·乌尔里希(Steffen Ulrich)所说,结果将因客户而异。我认为大多数客户不会产生错误。错误概念的一个问题是,您不知道的标头可能是一个值标头(与列表相对),因此您不知道是否允许重复它。因此,RFC很好,但不能正确遵循此类标题。

在大多数情况下,我会说重复标头尤其是具有相同价值的标题是不好的做法,并研究是否有可能避免重复。因为在您的情况下,两者都具有完全相同的值,因此对于大多数可用的客户而言,它可能很好。

相关内容

  • 没有找到相关文章

最新更新