凡是用浏览器查看任何WEB网站,无论你的WEB网站采用何种技术和框架,都用到了HTTP协议
HTTP协议在Response header和content之间,有一个空行,即两组CRLF(0x0D 0A)字符
这个空行标志着headers的结束和content的开始
攻击者可以利用这一点, 只要攻击者有办法将任意字符“注入”到headers中,这种攻击就可以发生
以登陆为例:有这样一个url
http://localhost/login?page=http%3A%2F%2Flocalhost%2Findex
当登录成功以后,需要重定向回page参数所指定的页面。
下面是重定向发生时的`response headers
HTTP/1.1 302 Moved
Temporarily Date: Tue, 17 Aug 2010 20:00:29 GMT
Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4
FrontPage/5.0.2.2635 Location: http://localhost/index
假如把URL修改一下,变成这个样子
http://localhost/login?page=http%3A%2F%2Flocalhost%2Fcheckout%0D%0A%0D%0A%3Cscript%3Ealert%28%27hello%27%29%3C%2Fscript%3E
那么重定向发生时的reponse会变成下面的样子:
HTTP/1.1 302 Moved
Temporarily Date: Tue, 17 Aug 2010 20:00:29 GMT
Server: Apache mod_fcgid/2.3.5 mod_auth_passthrough/2.1 mod_bwlimited/1.4
FrontPage/5.0.2.2635 Location: http://localhost/checkout<CRLF> <CRLF> <script>alert('hello')</script>
这个页面可能会意外地执行隐藏在URL中的java script
类似的情况不仅发生在重定向(Location header)上,也有可能发生在其它headers中
如`Set-Cookie header
这种攻击如果成功的话,可以做很多事,例如:执行脚本、设置额外的cookie (<CRLF>Set-Cookie: evil=value) 等
避免这种攻击的方法,就是过滤所有的response headers,除去header中出现的非法字符,尤其是CRLF(空行)
---------------------
作者:rugu_xxx
来源:CSDN
原文:https://blog.csdn.net/sinat_36629696/article/details/80748665
版权声明:本文为博主原创文章,转载请附上博文链接!