【问题标题】:Host name validation in phpphp中的主机名验证
【发布时间】:2011-09-30 06:03:35
【问题描述】:

如何在 PHP 中验证主机名?

如果假设我在IP:192.168.1.77 上运行我的应用程序服务器,并且如果请求包含除192.168.1.77 之外的主机名,则它不应允许进一步处理。

任何帮助或建议将不胜感激。

【问题讨论】:

  • ... 但是为什么请求应该包含不正确的主机名?我认为这应该在网络服务器级别处理。
  • 为什么不能有IP欺骗攻击?
  • 检查 Host 标头如何防止 IP 欺骗?
  • 我会抛出一个未经授权的页面。错误提示主机名不匹配

标签: php hostheader


【解决方案1】:

我会抛出一个未经授权的页面。错误提示主机名不匹配

为了什么?如果它是set up properly,这是 Web 服务器已经处理的事情:

如果您使用基于名称的虚拟主机,则部分内的 ServerName 指定必须出现在请求的 Host: 标头中的主机名才能匹配此虚拟主机。

无需在 PHP 脚本中额外检查。

这会是一个额外的安全呐?这就是我客户的要求

完全毫无意义,不会增加任何安全性。但是,我想这样做也没有什么坏处。

【讨论】:

  • @AmGates 服务器配置是一个复杂的领域。如果您的任务是设置生产服务器并且您不确定该怎么做,您可能希望找有经验的人来做这件事。无论如何,关于这个主题有很好的教程,这个看起来涵盖了基础,例如:apptools.com/phptools/virtualhost.php
  • 这对我帮助很大。谢谢你
【解决方案2】:

我猜你的意思是地址,而不是主机名。

if ($_SERVER['REMOTE_ADDR'] !== '192.168.1.77') die(header("Location: /")); 

如果你真的不想检查用户的主机名,使用这个

if ($_SERVER['REMOTE_HOST'] !== '192.168.1.77') die(header("Location: /")); 

更多信息http://php.net/manual/en/reserved.variables.server.php

【讨论】:

  • REMOTE_ADDR 将给出发出请求的机器的 IP。
  • 我以为这就是你想要的。您到底在寻找什么?
【解决方案3】:

我认为这是你必须在你的网络服务器配置中做服务器端的事情。 (.htaccess)

order deny, allow
deny from all
allow from 192.168.1.77

【讨论】:

  • 我不想限制任何客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-28
  • 1970-01-01
  • 2015-08-25
  • 2020-11-15
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多