如何检测是否在本地主机上运行

8

我有一个PHP脚本,我想检测用户是否在本地机器上运行,而不是通过互联网访问。目前,我检查服务器地址是否为127.0.0.1。这是最佳实践还是有更好的方法?


这是通常的做法,或者在Windows 7主机上使用IPV6 ::1,http://en.wikipedia.org/wiki/Localhost - RobertPitt
谢谢大家 -- 我没有考虑过IPv6。干杯。 - Alex Dunae
3个回答

12

在IPv4中,localhost始终被翻译为环回IP地址 127.0.0.1,而在IPv6中为::1。因此,在应用程序内验证IP地址是安全的,如果你的意思是如此。

if(IPAddress::In(array("127.0.0.1","::1")))
{
     //Show Application
}

我非常怀疑您会在80端口后面拥有一个精英黑客团队,但需要注意的是,依赖IP地址存在漏洞,因为TCP数据包可以被修改。

但这不应该成为您的担忧。


6

我不确定目前的答案是否正确,但可能是我自己混淆了。我特别回答你问题中的一部分,即“不能通过互联网访问”。这是我的回答:

Web服务器而不是PHP监听套接字并接受连接。 PHP可以从$ _SERVER(http://www.php.net/manual/en/reserved.variables.server.php)获取有关连接的信息。请注意,您检查的只是连接来自何处-您不能从$ _SERVER了解有关您的服务器是否可通过其他IP地址访问的任何信息。例如,我可以通过以下任何一种方式访问我的本地Apache / PHP实例:

因此,如果您的计划是应用程序在看到$ _SERVER [ "SERVER_ADDR"]中的“正确”值时表现不同,那么您可能非常安全 - 例如,很少有用户能够从远程客户端欺骗它。

说了这么多,我不会使用任何这些技术来验证用户身份或授权用户权限/操作在互联网上可用的部署应用程序。唯一的例外可能是如果你有一个完整的应用程序只能在本地主机访问时可用 - 那么这种技术可能是合理的,并且对于个人应用程序而言足够安全。


我不担心保护任何东西 - 这个脚本(WordPress插件)将文件的URL发送到基于Web的API; 我正在努力确保人们不会从他们的本地、非网络可访问的计算机尝试这样做。 - Alex Dunae

0

您也可以检查本地主机名localhost,但如果服务器地址为127.0.0.1,则应该解析。这是IPv4的标准做法。在IPv6上,您可以像Robert Pitt建议的那样检查::1。


@RobertPitt 可能是对的,但这不是唯一解析到本地机器的地址。在127/8网络块中还有大约16777216个地址。 - jcomeau_ictx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接