我发现了一个域名(网站和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
主要问题-该标头有时是响应中的 first 标头。反过来,这被视为漏洞。
在我看来,它是这样的:
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 https://tools.ietf.org/html/rfc7230#section-3的RFC
发件人不得在起始行和第一个标头字段之间发送空格。 ...
请求中存在此类空格可能是为了 诱使服务器忽略该字段或在之后处理行 作为一个新请求,可能会导致安全性 如果请求链中的其他实现存在漏洞 对同一条消息的解释不同。同样地, 某些客户端可能会忽略响应中的此类空格,或者 导致其他人停止解析。
这导致试图解析这些HTTP响应的node.js抛出错误。错误代码为HPE_INVALID_HEADER_TOKEN
,仅在HTTP标头格式错误时抛出。
问题:这是什么?谁在做?为什么?
答案 0 :(得分:2)
“这是什么?”
这是服务器端的错误,因为它违反了HTTP协议。
实际上,在2013年,HTTP工作组中的discussed是“ python库中的错误”,我认为conclusion的Julian Reschke是正确的:
这不是合法的字段名称,因此也不是标题字段行的合法开头。
...
语法禁止,因此无效。
“谁在做?为什么?”
当开发人员生成随机HTTP标头名称时,他/她偶然引入了这4个空白的前导字符。