nginx:将 $http_host 用于服务器根目录是否安全?

asp*_*yct 6 nginx

我想用我的 nginx 服务器提供任意域名。

这一点配置似乎工作得很好:

    location / {
        root   /www/$http_host;
        index  index.html index.htm;
    }
Run Code Online (Sandbox Code Playgroud)

例如,服务于 的请求www.mydomain.com将在/www/www.mydomain.com/. 它有效,看起来很完美。

但是我不确定这是否安全。这会允许任何类型的目录遍历或其他安全问题吗?nginx 对 $http_host 做了什么验证?

Pio*_*asz 3

正如jordanm所说,未经验证可能会导致客户端从/www目录中转义并访问任何文件。

幸运的是,主机名经过验证(参见源代码),并且使用两个连续点..或路径分隔符之类的技巧/将不起作用:nginx将返回400 Bad Header。验证可能更严格,并且只允许有效的 DNS 标签,但这是个人喜好。

尽管如此,使用这样的配置,你不能在/www目录中放置任何私有的东西,所以我宁愿使用:

root /www/$http_host/html
Run Code Online (Sandbox Code Playgroud)