我有一个PHP脚本,我想检测用户是否在本地计算机上运行,无法通过Internet访问。目前我检查服务器地址为127.0.0.1。这是最好的做法还是有更好的方法?
答案 0 :(得分:12)
Localhost始终转换为IPv4中的环回IP地址127.0.0.1
或IPv6中的::1
,因此,如果您的意思是验证应用程序中的IP将是安全的
if(IPAddress::In(array("127.0.0.1","::1")))
{
//Show Application
}
我非常怀疑你的端口80后会有一群精英黑客,但是作为旁注,有一些关于依赖IP地址的缺陷的讨论,因为可以修改TCP数据包。
但这不应该让你担心。
答案 1 :(得分:6)
我不确定到目前为止答案是否正确,但可能是我感到困惑。我特别回答你的问题部分,“无法通过互联网访问”。这是我尝试回答:
Web服务器(而不是PHP)侦听套接字并接受连接。 PHP可以从$ _SERVER(http://www.php.net/manual/en/reserved.variables.server.php)获取有关连接的信息。请注意,您所检查的所有内容都来自连接 - 您无法通过$ _SERVER的其他IP地址了解您的服务器是否可用。例如,我可以通过以下任何方式访问我的本地Apache / PHP实例:
所以,如果您的计划是应用程序在$ _SERVER [“SERVER_ADDR”]中看到“正确”值时表现不同,那么您可能非常安全 - 也就是说,用户不太可能欺骗它来自远程客户端。
说完所有这些之后,我不会使用任何这些技术来对用户进行身份验证,也不会对通过Internet提供的已部署应用程序上的用户权限/操作进行授权。一个例外可能是如果你有一个整个应用程序只有在从localhost访问时才可用 - 那么这种技术可能具有良好的意义,对于个人应用程序来说足够安全。
答案 2 :(得分:0)
您还可以检查主机名localhost,但如果服务器地址是127.0.0.1则应该解析。这是ipv4的标准做法。在ipv6上,您可以检查:: 1,如Robert Pitt建议的那样。