logo头像

黑客的本质就是白嫖

Apache/Nginx中host头的探究

前言

在之前的zzcms复现过程中,碰到了一个host头的问题,表现为当环境为win10+wamp时,修改host头会导致服务器出现400错误,具体原因在查找一些博客之后找到,这里趁着记忆还没消退,水一篇博客先

环境准备

  • win10虚拟机+phpstudy
  • ubuntu18.04版本虚拟机,的apache2nginx

两种环境都在根目录的index.php文件里输出了$_SERVER[‘HTTP_HOST’]
host_1

测试

首先看一下ubuntu下的情况

Ubuntu

Apache

直接访问的情况下没有任何问题

host_2

尝试添加一些其他字符

host_3
host_4

都不行,只有在添加的字串为数字的时候才能正常响应

host_5

接下来测试添加两条host

host_13

可以看到即使host是合法的,服务器也会出现400错误

Nginx

直接访问

host_16

显然没有问题,接下来尝试字符与数字

host_17

也没有问题,之后测试两个host头的情况

host_18

只显示第二个host

接下来是win10的情况

Win10

Apache

直接访问肯定没有任何问题

host_6

接下来尝试添加一些字符

host_7
host_8

可以看到无论是数字、字母还是字符,插入之后服务器都能正常的响应

测试两个host

host_15

两个都会显示

Nginx

还是先直接访问

host_9

没有任何问题,接下来测试添加字符

host_10
host_11
host_12

可以看到添加字符、数字以及字母都没有问题,测试添加两条host

host_14

只显示第二个host

总结

这样看来,在win10的环境下,使用apache还是使用nginx都可以修改host头,不会对请求有任何影响,服务器也能正常响应,当有两个host时,apache会获取两个,而nginx只会获取后一个;在ubuntu下,使用apache时,只有在host后添加数字才不会出现400错误,其他情况下都会出错,包括添加字符、添加第二个host头等等,而使用nginx时,和在win10下一样,可以修改任意字符,使用两个host头,但是也是只有第二个会被取

这样看来的话apache至少在host头这里会比nginx安全些,而服务器的选取也最好选择Linux


参考资料:

Apache/Nginx中Host头攻击的一些差异

评论系统未开启,无法评论!