NameVirtualHost 在 HTTP 请求伪造方面的安全性

NameVirtualHost 在 HTTP 请求伪造方面的安全性

如果我正确理解了 NameVirtualHost 的概念,它的工作原理是读取每个 HTTP 请求的 Host 变量,并将其与ServerName具有匹配接口和端口的任何活动 VirtualHost 指令进行匹配。如果找到匹配项,则ServerName将此 VirtualHost 的内容提供给客户端。

Host 变量很容易被客户端伪造。因此,在以下配置中:

Listen 80
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /super/secret/files
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /var/www/webserver
ServerName www.example.org
</VirtualHost> 

客户端只需将localhost其作为 Host 的值传递,即可访问机密文件。因此,您不能依赖 ,ServerName而必须使用OrderAllowDeny(OAD) 指令。

  1. 这些假设正确吗?
  2. 如果我使用 OAD 保护 VirtualHost,example.org/phpmyadmin用户仍然会收到403 Forbidden错误。我该如何配置 apache 以使其不在非本地主机连接上提供此 VirtualHost?<NameVirtualHost localhost:80>也许可以单独配置?

答案1

Host:仅针对正在监听请求所来自的接口/IP 地址的 s 检查标头。VirtualHost通配符表示虚拟主机可用于来自任何接口的请求。

如果您不希望人们访问localhost虚拟主机,请明确指定其 IP 地址,而不是允许从所有接口提供服务:

<VirtualHost 127.0.0.1:80 [::1]:80>
    ServerName localhost
    ....

附言:需要为 localhost 指定 IPv6 地址,因为它在任何现代系统上使用,并且默认情况下优先于 IPv4。

相关内容