在Web服务器防止Host头攻击
访问网站时如果访问路径中缺少/,大多数中间件都会自动将路径补全,返回302或301跳转如下图,Location位置的域名会使用Host头的值。
这种情况实际上风险较低,难以构成Host头攻击。但是由于大多漏洞扫描器会将这种情况检测为Host头攻击,为了通过上级检查或各种审核,大多数甲方单位会要求修复漏洞,彻底解决问题。
该跳转路径不是web项目定义的,是中间件自动跳转的,所以不能用编写静态变量的方法修复,web项目中的全局过滤器也无法拦截。需要在web服务器层面配置才能修复。下面给出几种常见服务器的参考修复方法,其中如有错误或不妥的地方欢迎指正。
Apache:
方法一:
修改\conf\httpd.conf文件
修改ServerName为应用的域名,例如
ServerName www.domain.com:80
添加下列行
UseCanonicalName On
重启Apache即可。
修复成功的话会看到,服务器端将会使用设定好的ServerName。
参数解释:
方法二:
修改\conf\httpd.conf文件
参考以下配置添加:
NameVirtualHost 192.168.0.16
192.168.0.16>
ServerName 192.168.0.16
Order Allow,Deny
Deny from all
192.168.0.16>
DocumentRoot "C:\www"
ServerName www.test.com
重启Apache即可。
作用:
拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www
方法三:
修改\conf\httpd.conf文件
找到”#LoadModule rewrite_module modules/mod_rewrite.so”去除前面的”#”号
添加类似以下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^192.168.0.16$ [NC]
RewriteRule ^(.*)$ /error.html
重启Apache即可。
作用:
当HOST头不是192.168.0.16时,重定向到错误页面。
Nginx:
方法一:
修改nginx.conf
添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
例子如下:
server {
listen 8888 default;
server_name _;
location / {
return 403;
}
}
重启nginx即可。
方法二:
修改nginx.conf
在目标server添加检测规则,参考以下标红配置:
server {
server_name 192.168.0.171;
listen 8888;
if ($http_Host !~*^192.168.0.171:8888$)
{
return 403;
}
include /etc/nginx/default.d/*.conf;
location / {
root /www/dvwa;
index index.php index.html index.htm;
}
}
重启nginx即可。
Tomcat:
修改tomcat\conf\server.xml
找到如下位置:
将Host里的name修改为静态的域名,如下:
访问网站时如果访问路径中缺少/,大多数中间件都会自动将路径补全,返回302或301跳转如下图,Location位置的域名会使用Host头的值。
这种情况实际上风险较低,难以构成Host头攻击。但是由于大多漏洞扫描器会将这种情况检测为Host头攻击,为了通过上级检查或各种审核,大多数甲方单位会要求修复漏洞,彻底解决问题。
该跳转路径不是web项目定义的,是中间件自动跳转的,所以不能用编写静态变量的方法修复,web项目中的全局过滤器也无法拦截。需要在web服务器层面配置才能修复。下面给出几种常见服务器的参考修复方法,其中如有错误或不妥的地方欢迎指正。
Apache:
方法一:
修改\conf\httpd.conf文件
修改ServerName为应用的域名,例如
ServerName www.domain.com:80
添加下列行 无奈人生安全网
UseCanonicalName On
重启Apache即可。
修复成功的话会看到,服务器端将会使用设定好的ServerName。
参数解释:
方法二:
修改\conf\httpd.conf文件
参考以下配置添加:
NameVirtualHost 192.168.0.16
192.168.0.16>
ServerName 192.168.0.16
Order Allow,Deny
Deny from all
192.168.0.16>
DocumentRoot "C:\www"
ServerName www.test.com
重启Apache即可。
作用:
拒绝直接通过192.168.0.16这个IP的任何访问请求,这时如果你用192.168.0.16访问,会提示拒绝访问。仅允许通过www.test.com这个域名访问,主目录指向C:\www copyright 无奈人生
方法三:
修改\conf\httpd.conf文件
找到”#LoadModule rewrite_module modules/mod_rewrite.so”去除前面的”#”号
添加类似以下配置:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^192.168.0.16$ [NC]
RewriteRule ^(.*)$ /error.html
重启Apache即可。
作用:
当HOST头不是192.168.0.16时,重定向到错误页面。
Nginx:
方法一:
修改nginx.conf
添加一个默认server,当host头被修改匹配不到server时会跳到该默认server,该默认server直接返回403错误。
例子如下:
server {
listen 8888 default;
server_name _;
location / { 本文来自无奈人生安全网
return 403;
}
}
重启nginx即可。
方法二:
修改nginx.conf
在目标server添加检测规则,参考以下标红配置:
server {
server_name 192.168.0.171;
listen 8888;
if ($http_Host !~*^192.168.0.171:8888$)
{
return 403;
}
include /etc/nginx/default.d/*.conf;
location / {
root /www/dvwa;
index index.php index.html index.htm;
} www.wnhack.com
}
重启nginx即可。
Tomcat:
修改tomcat\conf\server.xml
找到如下位置:
将Host里的name修改为静态的域名,如下:
本文来自无奈人生安全网