1、漏洞描述
开发人员为了方便获取网站域名一般依赖HTTP Host header(比如在php里是_SERVER["HTTP_HOST"] ),而这个header很多情况下是靠不住的。而很多应用是直接把这个值不做html编码便输出到了页面中。
比如:<link href="http://_SERVER['HOST']" (Joomla)还有的地方还包含有secret key和token,<a href="http://_SERVER['HOST']?token=topsecret"> (Django, Gallery, others)
2、漏洞检测
将请求包的Host字段值修改为 baidu.com 提交,发现服务器将 baidu.com 拼接到了from标签的action属性值中。
3、修复建议
1.由于http请求的特点,host header的值其实是不可信的。唯一可信的只有SERVER_NAME,这个在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。
2.Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。
3.Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项。
4.Tomcat,修改server.xml文件,配置Host的name属性。