$_SERVER["HTTP_HOST"]有多安全?

8
我有一个数据库,存储着许多网站的URL地址,这些网站的主键是 $_SERVER["HTTP_HOST"]
当用户访问一个网站时,比如说 www.my-epic-example-url.com ,它将连接到数据库,并使用该网站的 $_SERVER["HTTP_HOST"] 获取所有相关数据!
我想知道的是,$_SERVER["HTTP_HOST"] 安全吗?
它能被外部修改吗?
唯一的原因是因为我以前读过一篇文章(不记得在哪里看到),提醒我们使用 $_SERVER 要小心,因为它是不安全的...
这是真的吗?

2
可能是哪些$_SERVER变量是安全的?的重复问题。 - mellamokb
请不要将此关闭为重复内容,因为我正在从哪些$_SERVER变量是安全的?链接到这里,以获取有关HTTP_HOST的详细说明。 - deceze
可能是PHP中HTTP_HOST和SERVER_NAME有什么区别?的重复问题。 - user8438001
1个回答

20

$_SERVER["HTTP_HOST"] 是客户端发送的 HTTP Host 头部信息,因此该头部信息通常是 不安全 的。

但如果您处于典型的虚拟主机设置中,其中 Web 服务器根据 VirtualHost 配置决定要执行哪个脚本,而这些配置又是由 HTTP Host 头部信息触发的,则除非在该头部信息中接收到已知的白名单值,否则不应执行您的脚本

如果 Web 服务器不关心 Host 头部信息,并为所有请求执行某个特定脚本,则该值可以是任何内容。


你应该在关于重复问题的综合回答中加入一些内容。你没有在那里具体解释VirtualHost部分。 - Michael Berkowski
4
完成,参考其他答案中的翻译。 :) - deceze
1
请注意,绕过VirtualHost限制的已知方法,例如在HTTP请求中使用绝对URI,这会导致免费播放的主机头。因此,“通常不安全”是非常正确的。 - regilero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接