## 问题描述:
为了方便的获得网站域名,开发人员一般依赖于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)