我发现了一个域名(网站和 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 标头格式错误时才抛出。
问题:它是什么?谁在做?为什么?