比较IP地址

3
function getIp() {
  return "<?php echo $_SERVER['REMOTE_ADDR']; ?>";
}

我希望能够调整或重新制作这个程序,以便只有从本地主机或我的ISP服务器才能执行特定操作。我可以使用一些JavaScript适用于127.0.0.1的情况,但是对于其他情况就没办法了。
感谢您的帮助;谢谢。

3
JavaScript与此有什么关系?您应该澄清您的问题。 - Brad
如果客户端禁用了JavaScript,那怎么办?看起来你正在尝试实现某种安全性。这不是正确的方法。 - Matt Ball
不要忘记检查 ::1 - glglgl
1
永远不要使用JavaScript来处理属于服务器端的事情。 - xdazz
1个回答

6

您真的希望完全在服务器上完成此操作。如果在客户端检查IP,则人们可以非常容易地通过使用像Firebug这样的Web检查器在其浏览器中修改您的代码来绕过该检查。

幸运的是,服务器端处理相当简单:

$_SERVER ['REMOTE_ADDR']变量是一个简单的字符串,因此您应该能够使用字符串比较来检查您想要的IP。

例如:

<?php
   if ($_SERVER['REMOTE_ADDR'] == "127.0.0.1" || $_SERVER['REMOTE_ADDR'] == "1.2.3.4") {
       echo "Show secret things here";
   }
?>

感谢大家,特别是St3fan。它起作用了。我应该解释一下,我所做的不是一个软件解决方案,而是使用软件的解决方案。我的主要关注点在其他方面,但我觉得我需要编写一些代码作为专业帮助的性能规范。 - Chris Glasier
问题标题是“比较IP地址”。注意,通常字符串比较不适用于比较IP地址!原因是有多个字符串表示相同的IP。例如,IP 127.0.0.1 等于 127.000.000.001127.00.000.1 或甚至 0:0:0:0:0:ffff:7f00:1 (作为ipv6),只是举几个例子。如果您知道IP以某种规范化格式存在,则可以进行字符串比较。可能 $_SERVER ['REMOTE_ADDR'] 进行了这样的操作(我没有找到相关资料),但这也可能取决于PHP版本、操作系统等。 - Christopher K.
为了保险起见,最好使用 if(ip2long($_SERVER['REMOTE_ADDR']) === ip2long("127.0.0.1"))(仅适用于IPv4)。 - Christopher K.

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