Php 美元服务器[';服务器名称';]可以伪造/伪造吗?

Php 美元服务器[';服务器名称';]可以伪造/伪造吗?,php,http-referer,server-name,Php,Http Referer,Server Name,PHP变量$\u SERVER['SERVER\u NAME']是否可以伪造?我打算用它作为表格张贴的安全措施。我会检查以确保变量是我的站点名称(www.example.com)。我知道HTTP_推荐人可能是伪造的,但我不确定这一点 谢谢 它不能伪造,但是它总是会返回你的站点名称。如果使用同一脚本运行多个站点,例如,根据提供的主机名使用不同的数据库,则此功能非常有用 报告说: 实际上$\u服务器['SERVER\u NAME']可能会受到客户端浏览器发送的内容的影响。。。有关该问题的全面调查,请

PHP变量$\u SERVER['SERVER\u NAME']是否可以伪造?我打算用它作为表格张贴的安全措施。我会检查以确保变量是我的站点名称(www.example.com)。我知道HTTP_推荐人可能是伪造的,但我不确定这一点


谢谢

它不能伪造,但是它总是会返回你的站点名称。如果使用同一脚本运行多个站点,例如,根据提供的主机名使用不同的数据库,则此功能非常有用

报告说:


实际上$\u服务器['SERVER\u NAME']可能会受到客户端浏览器发送的内容的影响。。。有关该问题的全面调查,请参阅。

访客通常不会伪造。但我怀疑您可能希望强制使用某个服务器名称来许可脚本,以便它们只能由特定域使用。在这种情况下,答案是肯定的,这个变量肯定是伪造的

原因很简单,服务器设置此值。在大多数情况下,您会让PHP作为Apache模块运行,但有时您会有其他Apache模块,有时您会让PHP在CGI模式下与NGINX或IIS一起运行,有时您甚至会让PHP作为CLI分支运行,并由部署在云中的自定义构建服务器作为子进程。这些服务器将负责设置该变量

另外,还有手动分配

 $_SERVER['SERVER_NAME'] = ... // this can go above all your scripts

不管发生什么,一切都是一样的。。你的服务器。不是请求来自的服务器。您将
server\u NAME
HTTP\u HOST
混淆。感谢您提供此博客文章的链接。然而,它提到了在apache Web服务器“配置错误”的情况下,通过发送HTTP_主机头来影响服务器名称的可能性。如果web服务器配置正确/安全,您是否知道有其他方式影响此值?我不知道,但问题是,Apache中的设置默认设置为unsecure(),因此我想很多人不会意识到他们需要更改该值以使其安全。
 $_SERVER['SERVER_NAME'] = ... // this can go above all your scripts