1

我发现了一个域名(网站和 API),它为每个 HTTP 响应添加了这样的标头:

    XTVOpalL: Gtm; path=/; Max-Age=900

标题名称看起来是随机的。以下是一些其他示例:

    XRQOJalT: LtZ; path=/; Max-Age=900
    XYjOzalA: Ntx; path=/; Max-Age=900
    XykOMalm: ytD; path=/; Max-Age=900

注意前导的 4 个空格。并与其他响应标头进行比较:

HTTP/1.1 301 Moved Permanently
Date: Sat, 05 May 2018 11:52:25 GMT
Server: Apache
Location: http://example.com/wp/
Content-Length: 229
Content-Type: text/html; charset=iso-8859-1
Set-Cookie: visid_incap_993094=GuEL85vzTDKQUJ9jfphhgvma7VoAAAAAQUIPAAAAAACgWz3NlkG3smvkXeB6Ewyl; expires=Sun, 05 May 2019 08:21:45 GMT; path=/; Domain=.example.com
Set-Cookie: nlbi_993094=z0NWEcMl0wAVBr8CiwzebQAAAACu2KRRlrUCoWpyWKTrUAJF; path=/; Domain=.example.com
Set-Cookie: incap_ses_115_993094=/xoUXc5Kags3fAFBHpCYAfma7VoAAAAABT/i1XAh1J4D/02wGnXO9w==; path=/; Domain=.example.com
Set-Cookie: ___utmvmicuVtwf=peInjtBXhca; path=/; Max-Age=900
Set-Cookie: ___utmvaicuVtwf=wYxmyOU; path=/; Max-Age=900
Set-Cookie: ___utmvbicuVtwf=TZr
    XYjOzalA: Ntx; path=/; Max-Age=900
X-Iinfo: 13-63374213-63374214 NNNN CT(222 -1 0) RT(1525521145044 0) q(0 0 2 0) r(5 5) U11
X-CDN: Incapsula

主要问题 - 此标头有时是响应中的第一个标头。反过来,这被认为是一个漏洞。

就我而言,它看起来像这样:

HTTP/1.1 301 Moved Permanently
    XYjOzalA: Ntx; path=/; Max-Age=900
Date: Sat, 05 May 2018 11:52:25 GMT
Server: Apache
Location: http://example.com/wp/
...

引用 HTTP 1.1 的 RFC https://www.rfc-editor.org/rfc/rfc7230#section-3

发件人不得在起始行和第一个标头字段之间发送空格。...

请求中出现此类空格可能是试图诱使服务器忽略该字段或将其后面的行作为新请求处理,如果请求链中的其他实现解释相同,则任何一种都可能导致安全漏洞消息不同。同样,响应中此类空格的存在可能会被某些客户端忽略或导致其他客户端停止解析。

这会导致 node.js 在尝试解析这些 HTTP 响应时抛出错误。错误代码是HPE_INVALID_HEADER_TOKEN,仅当 HTTP 标头格式错误时才抛出。

问题:它是什么?谁在做?为什么?

4

1 回答 1

2

“它是什么?”

这是服务器端的错误,因为它违反了 HTTP 协议。

实际上,2013 年 HTTP 工作组就“python 库中的一个错误”进行了讨论,我认为 Julian Reschke 的结论正确的:

它不是合法的字段名称,因此不是标题字段行的合法开始。

...

它被语法禁止,所以它是无效的。

“谁干的?为什么?”

当开发者生成随机的 HTTP 头名称时,他/她无意中引入了这个 4-whitespace 前导字符。

于 2019-07-11T00:33:04.133 回答