详细描述:为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。 例如,在php里用_SERVER["HTTP_HOST"]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。
解决办法: web应用程序应该使用SERVER_NAME而不是host header。
在Apache 和Nginx 里可以通过设置一个虚拟机来记录所有的非法host header。在Nginx里还可以通过指定一个SERVER_NAME名单,Apache也可以通过指定一个SERVER_NAME名单并开启UseCanonicalName选项。
IIS7.0+:微软推出了一款URL 重写模块工具,可对请求URL进行过滤处理,此工具需要自行安装,下面提供工具下载地址:
微软下载地址(64位): http://www.microsoft.com/zh-cn/download/details.aspx?id=7435
微软下载地址(32位): http://www.microsoft.com/zh-cn/download/details.aspx?id=5747
IIS 详细配置
- 安装的工具后,重启IIS
- 打开网站,双击URL重写
- 添加请求 -- 请求阻止
字段 值 阻止依据 主机头 阻止请求 与模式不匹配 模式(主机头) 192.168.1.*** 使用 通配符 阻止方式 403
- 双击刚创建的规则 -- 模式不匹配 -- 完全匹配 -- 最下面(中止请求)
参考网址:在Web服务器防止Host头攻击