如何从我的网站上禁止所有国家/地区

时间:2011-11-04 23:01:53

标签: geolocation forum mybb

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

有一种简单的方法吗?建议将不胜感激。

4 个答案:

答案 0 :(得分:3)

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

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

Captcha可以在某种程度上提供帮助,但实际上它已被打破(在很好的编程机器人可以解决Captcha挑战的意义上)已经好几年了。

StackOverflow模型实际上非常好......不要让新用户做很多事情,直到他们获得一点点声誉(例如发布一些被其他用户提升或需要前几个帖子的东西)获得主持人批准。)

答案 1 :(得分:1)

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

答案 2 :(得分: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;
}

答案 3 :(得分:0)

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