一、漏洞描述:
为了方便获取网站域名,开发人员一般依赖于请求包中的Host首部字段。例如,在php里用_SERVER[“HTTP_HOST”]。但是这个Host字段值是不可信赖的(可通过HTTP代理工具篡改),如果应用程序没有对Host字段值进行处理,就有可能造成恶意代码的传入。
二、解决办法
打开tomcat/conf/server.xml文件,修改属性:name:主机域名
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false">
</Host>
# 修改 name = “localhost” 为 name = “www.xxx.com”
<Host name="www.xxx.com" appBase="webapps"
unpackWARs="true" autoDeploy="false">
</Host>
其它修复建议:
Web应用程序应该使用SERVER_NAME而不是host header。
在Apache和Nginx里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
参考:
Nginx,修改ngnix.conf文件,在server中指定一个server_name名单,并添加检测。
Apache,修改httpd.conf文件,指定ServerName,并开启UseCanonicalName选项。
Tomcat,修改server.xml文件,配置Host的name属性
在Tomcat配置多域名,目的是和apache相对应,实现多域名访问。 使用 < Alias></ Alias>,务必注意,使用的是首字母大写。
正确配置如下:
在默认的host下添加一个同级的host。
<Host name="www.xxx.com" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" reloadable="true" docBase="E:\Workspace\test1\WebRoot" />
<Alias>196.128.1.101</Alias>
</Host>