用PHP动态识别子域的最佳方法是什么?

用PHP动态识别子域的最佳方法是什么?,php,security,subdomain,Php,Security,Subdomain,我已经配置了*.mydomain.com的通配符DNS,并且一切正常。我的问题是,我应该依靠哪一个来识别客户端子域请求 $\u服务器[HTTP\u主机] $\u服务器[服务器名称] $\u服务器[脚本\u URI] 它们似乎都包含了我想要的子域部分,但在读了Chris的这篇文章后,我迷失在大海中,似乎没有安全的方法可以做到这一点 安全地完成这项任务有什么想法吗?你喜欢哪种方法 更新:抱歉,我是说这篇文章:我建议您获取当前页面的url,然后使用正则表达式进行检查。请务必忽略链接www、www2等内

我已经配置了*.mydomain.com的通配符DNS,并且一切正常。我的问题是,我应该依靠哪一个来识别客户端子域请求

$\u服务器[HTTP\u主机] $\u服务器[服务器名称] $\u服务器[脚本\u URI] 它们似乎都包含了我想要的子域部分,但在读了Chris的这篇文章后,我迷失在大海中,似乎没有安全的方法可以做到这一点

安全地完成这项任务有什么想法吗?你喜欢哪种方法


更新:抱歉,我是说这篇文章:

我建议您获取当前页面的url,然后使用正则表达式进行检查。请务必忽略链接www、www2等内容。

我建议您获取当前页面url,然后使用正则表达式进行检查。请务必忽略链接www、www2等内容

$subdomain = explode('.', $_SERVER['HTTP_HOST'], -2);
始终返回数组,如果没有子域,则可以为空。您还应该注意到,这可能会将www作为数组值返回,并且无论如何都会链接到您的根域


始终返回数组,如果没有子域,则可以为空。您还应该注意,这可能会将www作为数组值返回,并且无论如何都会链接到您的根域。

您可以使用除大多数使用HTTP\U主机之外的任何主机

您不必担心这里的“安全性”,因为您允许子域使用通配符。您将无法阻止用户进入“威胁”子域并向您的服务器发送请求


如果您想禁止某些子域,那么您有几个选项,但这是一个不同的问题。

您可以使用除大多数使用HTTP\U主机之外的任何主机

您不必担心这里的“安全性”,因为您允许子域使用通配符。您将无法阻止用户进入“威胁”子域并向您的服务器发送请求


如果你想禁止某些子域,那么你有几个选择,但那是一个不同的问题。

关于这样一个小问题谈论得太多了。 每个人都说这很危险,但没人费心写一个解决方案,就这么简单

$mydomain='example.com';
$subdomain="";
$matches=array();

$pat='!([a-z0-9_]+)\.'.preg_quote($mydomain).'$!i';
if (preg_match($pat,$_SERVER['HTTP_HOST'],$matches)) $subdomain=$matches[1];

对这样一个小问题谈得太多了。 每个人都说这很危险,但没人费心写一个解决方案,就这么简单

$mydomain='example.com';
$subdomain="";
$matches=array();

$pat='!([a-z0-9_]+)\.'.preg_quote($mydomain).'$!i';
if (preg_match($pat,$_SERVER['HTTP_HOST'],$matches)) $subdomain=$matches[1];

HTTP_主机直接来自主机头。Apache不会以任何方式清理它。即使对于非通配符设置,配置中的第一个virtualhost也会收到一个主机头请求,该主机头与配置的任何vHost都不匹配,因此必须小心使用。将其视为任何其他用户数据。使用前对其进行适当过滤。

HTTP\u主机直接来自主机头。Apache不会以任何方式清理它。即使对于非通配符设置,配置中的第一个virtualhost也会收到一个主机头请求,该主机头与配置的任何vHost都不匹配,因此必须小心使用。将其视为任何其他用户数据。使用前对其进行适当过滤。

有趣的逻辑。不要担心,因为你无论如何都无法阻止攻击。如果他可以呢?我是否错过了某种形式的攻击,即使代码只是“识别”子域,也会利用URL的子域部分进行攻击?@schrapnel上校:你无法阻止攻击。您只能防止这些攻击成功。@Gumbo当然可以。但我想你们不必担心,反正结论是错误的:有趣的逻辑。不要担心,因为你无论如何都无法阻止攻击。如果他可以呢?我是否错过了某种形式的攻击,即使代码只是“识别”子域,也会利用URL的子域部分进行攻击?@schrapnel上校:你无法阻止攻击。您只能防止这些攻击成功。@Gumbo当然可以。但我认为你不必担心这是一个错误的结论: