HTTP标头注入
什么是HTTP标头注入?
HTTP标头注入是一种利用Web应用漏洞的攻击方法。攻击者将包含回车符和换行符(CRLF)在内的恶意字符串嵌入发送至Web服务器的HTTP请求中,从而操纵HTTP响应。Web应用如果未经清理便将用户提供的参数直接存入HTTP响应标头,则尤其容易受到此类攻击。
例如,假设浏览器发送以下带参数的请求:
http://f5.com/index.html?status=1
如果Web应用程序要使用status=1参数进行会话管理,可能会返回如下HTTP响应:
HTTP/1.1 200 OK
...
Set-Cookie:status=1
现在,假设使用以下特制输入修改该请求:
http://f5.com/index.html?status=1<CRLF><CRLF><html><body><script>~</script></body></html>
Web应用程序的HTTP响应将被修改为:
HTTP/1.1 200 OK
...
Set-Cookie:status=1
<空行>
<html><body><script>~</script></body></html>
在HTTP响应中,两个CRLF字符(空行)之后的任何内容都会被视为响应正文,并由浏览器呈现。如果响应正文包含恶意JavaScript,浏览器将执行该脚本,可能导致安全漏洞。此外,攻击者还可能构造输入,注入如下标头内容:
<CRLF>Set-Cookie:PHPSESSID=abc
这会在浏览器中设置特定的会话ID,从而使攻击者能够发起会话固定攻击。
如何防止HTTP标头注入:
- 清理:验证并清理HTTP请求标头中接收的参数,使恶意字符串失效。
- Web应用防火墙(WAF):由于很难对所有Web应用进行一致的清理,因此部署WAF是一种有效的解决方案。WAF可监控应用层流量,并阻止被判定为攻击的请求,从而降低HTTP标头注入风险。

