HTTP_HOST的可靠性如何?

9 php apache http-host

我编写了一个PHP脚本,我想在同一台服务器上的几个域上使用(指向相同的脚本).我想为脚本添加功能,以便我可以随时找出脚本正在使用哪个域.HTTP_HOST可用于查找域,但是,我已经读过它不可靠,特别是对于旧浏览器.我的理解是大多数Apache服务器都使用相同的方法使用相同的方法,所以如果它不是主机提供商的问题,它应该不是我的代码的问题.

任何人都可以验证这一点并清除混淆吗?

Bru*_*uno 10

HTTP_HOST用于Host:请求期间HTTP 1.1用户代理发送的标头.HTTP 1.0客户端不使用它,因此它不会出现.但是,如今,我认为还没有很多HTTP 1.0客户端.

  • @Pekka不是什么大不了的事.这样的虚构客户端将无法访问大多数站点(基于虚拟主机的站点),因此,它只是不切实际. (2认同)
  • @Col是的,这就是我想知道的:这样的客户端如何从多vhost服务器请求资源呢?那一定是*真的很老.无论如何,它回答了这个问题 (2认同)

Pek*_*ica 9

编辑:我更正了:HTTP 1.0请求中不存在HOST标头.见@ Bruno的回答.出于安全考虑,将矿井留在原地

我所知道的HTTP_HOST唯一的问题是安全问题,而不是兼容问题.

安全问题源于HTTP_HOST用户发送的事实.如果Web服务器设置不正确和/或错误,则任意HTTP_HOST值都可以进入您的站点/脚本(请参阅此处以获取详细讨论).您的应用程序需要为此做好准备.

永远不要信任HTTP_HOST是好的(例如,在PHP脚本中处理它之前为它设置一个允许值数组是个好主意):

<?php
  $allowed_hosts = array("domain1.com", "domain2.com", "domain3.com");

  if (!in_array(strtolower($_SERVER["HTTP_HOST"]), $allowed_hosts))
   die ("Unknown host name ". $_SERVER["HTTP_HOST"]);
Run Code Online (Sandbox Code Playgroud)