您的位置:首页 > 理论基础 > 计算机网络

http host头攻击漏洞

2020-11-04 09:41 791 查看

原文地址: https://www.zhuyilong.fun/tech/handel_httphost_attack.html

漏洞描述

为了方便的获得网站域名,开发人员一般依赖于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选项。

具体步骤

项目代码

程序编写中避免使用HTTP_HOST,如有需要使用SERVER_NAME替代

nginx配置

  1. 配置文件中server_name上设置具体域名.eg:
server_name example.com;
  1. 在nginx上设置一个default_server处理其他域名来处理默认的请求.即,非设置域名返回一个http status code 4xx 的代码
server{
listen       80  default_server;
server_name  _;
return       400;
}

Apache配置

  1. 方法一: 修改\conf\httpd.conf配置文件中server_name,设置具体域名.eg:
ServerName example.com:80  # 指定域名和端口号

添加下列行

UseCanonicalName On # 使用指定的域名和端口号
  1. 方法二: 修改\conf\httpd.conf文件,参考以下配置添加:
NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>

ServerName 127.0.0.1

<Location />

Order Allow,Deny

Deny from all # 拒绝直接通过IP地址的任何访问

</Location>

</VirtualHost>

<VirtualHost 127.0.0.1>

DocumentRoot "C:\www\example"

ServerName example.com # 仅允许通过域名访问

</VirtualHost>
  1. 方法三: 修改\conf\httpd.conf文件,找到"#LoadModule rewrite_module modules/mod_rewrite.so"去除前面的"#"号,添加类似以下配置:
RewriteEngine on

RewriteCond %{HTTP_HOST} !^127.0.0.1$ [NC]

RewriteRule ^(.*)$ /error.html

配置修改后都需要重启nginx/apache

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: