我主持了一个论坛,目标受众只有美国、澳大利亚和大洋洲。我想知道如何禁止所有其他国家访问我的论坛,除了上述三个。我一直在注册机器人时遇到问题,它们都来自其他国家/地区的 IP,所以我认为这会解决问题并且不会打扰我的目标受众。
是否有捷径可寻?建议将不胜感激。
我主持了一个论坛,目标受众只有美国、澳大利亚和大洋洲。我想知道如何禁止所有其他国家访问我的论坛,除了上述三个。我一直在注册机器人时遇到问题,它们都来自其他国家/地区的 IP,所以我认为这会解决问题并且不会打扰我的目标受众。
是否有捷径可寻?建议将不胜感激。
机器人在世界各地使用代理服务器。运行机器人的人知道如何绕过 IP 阻塞。
使用 GeoIP 阻止机器人在您的系统上注册并不能真正解决核心问题。
Captcha 可以在一定程度上有所帮助,但它实际上已经被破坏了好几年(从某种意义上说,编程良好的机器人可以解决 Captcha 挑战)。
StackOverflow 模型实际上非常好......在新用户获得一点声誉之前不要让他们做太多事情(例如发布一些得到其他用户赞成的内容,或者要求前几篇帖子获得版主批准) .
MaxMind 的GeoLite 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 的任何技术。