我主持了一个论坛,目标受众只有美国、澳大利亚和大洋洲。我想知道我怎样才能禁止除上述三个国家以外的所有其他国家访问我的论坛。我一直有一个机器人注册的问题,他们都来自其他国家的ip,所以我认为这将解决这个问题,不会打扰我的目标受众。
是否有简单的方法来做到这一点?
bot使用世界各地的代理服务器。运行机器人的人知道如何绕过IP封锁。
使用GeoIP来阻止bot在你的系统上注册并不能真正解决核心问题。
Captcha在某种程度上可以帮助,但实际上它已经被打破了好几年(从某种意义上说,编程良好的机器人可以解决Captcha挑战)。
StackOverflow模型实际上是非常好的…在获得一点声誉之前,不要让新用户做太多事情(例如,发布一些得到其他用户支持的内容,或者要求前几个帖子获得版主的批准)。
MaxMind的geoolite City免费数据库可以轻松下载,更新和处理以本地化IP地址。
使用此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;
}
最简单的方法是获取每个国家的ip列表(它们通常大致按国家分配,http://www.countryipblocks.net/)。这有可能意外地阻止合法客户的人,并允许不合法的人进入网站,但它应该处理95-99%的情况。然后你只需设置防火墙或网络服务器或任何你选择的技术来阻止这些ip。