漏洞说明
为了方便的获得网站域名,开发人员一般依赖于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选项。
修复过程
配置server块default_server,处理没请求到具体url的请求
server { listen 80 default_server; server_name _; location / { return 403; } }
nginx 的 default_server 指令可以定义默认的 server 去处理一些没有匹配到 server_name 的请求,如果没有显式定义,则会选取第一个定义的 server 作为 default_server。
之后将后续的server_name配置上准确的可访问的地址,重启nginx即可
#其余server配置
server_name 127.0.0.1 192.168.1.1 www.test.com;
#重启
nginx -s reload