【发布时间】:2016-12-19 12:44:16
【问题描述】:
我有一个远程登录脚本,用户在他的服务器上托管(运行)。在注册期间,用户需要指定他将登录的域。当用户在他的域上运行脚本并第一次登录到我的服务器时,我使用以下命令记录他的 IP:
$ip_address = $_SERVER['REMOTE_ADDR'];
当用户第二次登录时,我检查他的 IP 地址是否仍然相同(使用上述相同的功能)。然后我检查他是否仍然使用相同的域:
$domain = $_SERVER['HTTP_REFERER'];
最后,除了其他安全检查之外,我还使用以下方法检查指定域是否真的指向 IP 地址:
$domain_ips_array = gethostbynamel($domain);
if (in_array($ip_address, $domain_ips_array)) {
echo "Wonderful, domain really points to this IP";
}
但是当域指向专用 IP 时就会出现问题。例如,如果服务器的 IP(实际托管脚本的位置)是 1.1.1.1(此 IP 也由 $_SERVER['REMOTE_ADDR'] 返回),但域配置为使用专用 IP 1.1.1.2,gethostbynamel 函数将只返回 1.1.1.2,检查将失败(即使域实际上托管在 IP 地址为 1.1.1.1 的服务器上)。
我该如何解决这个问题?简而言之,我需要确保用户始终在同一个 IP/域上运行脚本,如果其中任何一个发生更改,就会显示警报。
【问题讨论】:
-
你给用户脚本了吗?
-
是的,用户在他的服务器上运行脚本。所有脚本文件都经过编码。
-
现在我想到了一个想法,如果我能够获得安装脚本的位置,我可以消除检查域是否与特定 IP 匹配的需要。当然,如果脚本安装在 userdomain.com/script/ 上,我可以在脚本本身中获取当前 URL,并将其发送到我的服务器。但是这种方式很容易受到攻击,因为用户可以在将数据发送到我的服务器之前以某种方式修改数据。因此,如果我的服务器有任何方法可以看到来自 userdomain.com/script/ 的请求(就像我可以看到实际的 IP 地址)而不将其存储在我的脚本中并且不使用 $_SERVER['HTTP_REFERER']?
标签: php dns cross-domain ip-address