【发布时间】:2016-11-03 06:17:42
【问题描述】:
我正在尝试阻止我网站的一些用户。好吧,我需要两件事:
- 获取用户IP
- 阻止它
我已经搜索过它们。我知道我必须得到用户的 IP like this:
$ip = $_SERVER['REMOTE_ADDR'];
// or sometimes $_SERVER['HTTP_X_FORWARDED_FOR']
我必须阻止它like this:
$network = ip2long("10.12.0.0");
$mask = ip2long("255.255.0.0");
$ip = ip2long($_SERVER{'REMOTE_HOST'});
if (($network & $mask) == ($ip & $mask)) {
die("Unauthorized");
}
如您所见,为了阻止 IP,它使用$_SERVER{'REMOTE_HOST'}。这就是$_SERVER{'REMOTE_HOST'} 和$_SERVER['REMOTE_ADDR'] 之间的区别?哪个包含IP?
【问题讨论】:
-
您可以编写自己的 php 代码来阻止 ips。在您的数据库中,有一个像 ipBan 之类的表,然后每当用户访问您的网站时,在 ipBan 表中搜索他们的 ip。如果找到,只需将它们重定向到空白.php 之类的页面。容易。
-
我不知道网络/掩码是什么东西,ip2long 完全没有必要。
if($_SERVER['REMOTE_ADDR'] == 'ip you want to block') { die('Unauthorized.'); } -
@stack 是的,非常错误。
-
正确。请注意,除非您的 Apache 服务器打开了
HostnameLookups On,否则根据 PHP 文档,REMOTE_HOST不存在(不确定 nginx 是否有类似的东西)。由于这对服务器来说有点重,它很可能是关闭的并且是空的。 -
你似乎让这件事变得比它需要的复杂得多。