我有一个远程登录脚本,用户托管(运行)在他的服务器上。在注册期间,用户需要指定他将登录的域。当用户在他的域中运行脚本并第一次登录到我的服务器时,我使用以下命令记录他的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。
施展魔法,将IP返回给脚本。然后把它存储在某个地方,然后总是发送。
这样,您将始终拥有第一个IP。然后检查$_SERVER
变量。域名可以更改,我认为这不是那么可靠。
说得更简单,你需要把它存储在某个地方。
编辑
可以使用gethostbyaddr函数
这将返回IP的域。因此,您可以从第一个请求存储域,然后检查它与每一个其他。