🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 问题描述: 为了方便的获得网站域名,开发人员一般依赖于HTTP Host header。例如,在php里用\_SERVER\["HTTP\_HOST"\]。但是这个header是不可信赖的,如果应用程序没有对host header值进行处理,就有可能造成恶意代码的传入。 ![](https://img.kancloud.cn/82/2a/822a8cc7e95213f35e1730ad8a6aaf89_704x462.png) ## 修复方案(nginx): **1.** **方法一:修改nginx.conf** 添加一个默认server,nginx 会根据访问头(request head)中Host 的数据来确定使用哪个server来处理当前请求。如果请求没有匹配任何 server,或者访问头(request head)中没有包含Host的数据,那么nginx会将该请求路由给默认的 server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。 ``` server { listen 80 default_server; server_name _; access_log off; return 403; } ``` **2.** **方法二:修改nginx.conf** 在目标server添加检测规则,参考以下配置:(if部分) ``` server { server_name 192.168.0.171; listen 80; if ($http\_Host !~\*^192.168.0.171:80$) { return 403; } include /etc/nginx/default.d/\*.conf; location / { root /www/dvwa; index index.php index.html index.htm; } } ``` **验证方式:** 验证使用BurpSuite工具的Repeater模块。 修复前:修改host还是可以正常访问 ![](https://img.kancloud.cn/dc/85/dc851f5d2fe0ca66b97615d983a99c1a_554x199.png) 修复后:修改host无法访问了 ![](https://img.kancloud.cn/f8/07/f80730c4afc573216bcbc3df8aba0928_554x278.png)