2

我主持了一个论坛,目标受众只有美国、澳大利亚和大洋洲。我想知道如何禁止所有其他国家访问我的论坛,除了上述三个。我一直在注册机器人时遇到问题,它们都来自其他国家/地区的 IP,所以我认为这会解决问题并且不会打扰我的目标受众。

是否有捷径可寻?建议将不胜感激。

4

4 回答 4

3

机器人在世界各地使用代理服务器。运行机器人的人知道如何绕过 IP 阻塞。

使用 GeoIP 阻止机器人在您的系统上注册并不能真正解决核心问题。

Captcha 可以在一定程度上有所帮助,但它实际上已经被破坏了好几年(从某种意义上说,编程良好的机器人可以解决 Captcha 挑战)。

StackOverflow 模型实际上非常好......在新用户获得一点声誉之前不要让他们做太多事情(例如发布一些得到其他用户赞成的内容,或者要求前几篇帖子获得版主批准) .

于 2011-11-04T23:12:44.340 回答
1

MaxMind 的GeoLite City免费数据库可以轻松下载、更新和处理以本地化 IP 地址。

于 2011-11-04T23:08:28.617 回答
1

使用此 PHP 代码,您可以允许选定的国家/地区查看您的网站。所有其他用户将显示空白页面,并显示他们无法访问站点的消息。

&& $country != "XY" 您可以通过添加其中 XY 是您允许查看您的站点的国家/地区代码来设置任意数量的国家/地区。

下面的示例韩国和美国可能会查看该网站,而其他人则不会。稍作修改,您还可以根据需要阻止或允许选定的 IP

$userIP = get_ipxx(false);
$country = file_get_contents('http://api.hostip.info/country.php?ip=' . $userIP);

if ($country != "KR" && $country != "US") {
    die ('ERROR : SITE IS UNAVAILABLE');
}

function get_ipxx($ip2long = true) {
    if($_SERVER['HTTP_CLIENT_IP']) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }else if($_SERVER['HTTP_X_FORWARDED_FOR']) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    if($ip2long) {
        $ip = ip2long($ip);
    }
    return $ip;
}
于 2012-09-24T10:01:30.517 回答
0

最简单但相当暴力的方法是获取每个国家的 IP 列表(它们通常按国家大致分配,http://www.countryipblocks.net/)。这可能会意外阻止合法客户,但仍允许不合法的人进入该站点,但它应该可以处理 95-99% 的情况。然后,您只需设置防火墙或网络服务器或您选择阻止任何这些 IP 的任何技术。

于 2011-11-04T23:06:20.970 回答