当前位置

部分网站屏蔽来自中国大陆的IP访问

James Qi 在 2019年6月18日 - 08:16 提交

  我们多年前就做过繁体网站,从访问统计来看,基本上都是香港、台湾和海外华人,来自中国大陆的用户很少。不过有些地方我们考虑得也不周全,例如一些在港台可以访问的字典等内容,在内地成了敏感词,容易给我们网站惹上麻烦。🙁

  我们做网站无非是在为网民提供服务的同时获得应得的一点广告收入,不想卷入是非,最近准备把部分网站进行一些改造,除了删除一些内容以外(网上下载的敏感词也不靠谱,还是需要人工甄别,真是个麻烦事情),干脆只对海外中文用户提供服务,不让中国用户访问。🚫

  找到很久前写的一篇《一个判断访问者是否来自中国大陆的Drupal模块及PHP函数》,这篇文章的附件中有可以下载的模块文件,在需要的Drupal网站上安装,然后在html.tpl.php显示模板中调用,只要是来自中国的IP地址就用403拒绝,其它国家和地区的IP就放行,示范的PHP代码片段:

if (in_china()) {
  header('HTTP/1.1 403 Forbidden');
  print '403 Forbidden';
  exit;
}

  实测是可以正常运作的,后来又想在MediaWiki网站中调用,就把上面模块中的两个文件in_china_IP2Location.php、in_china_IP-COUNTRY.BIN下载放置在MediaWiki网站目录中,试了LocalSetting.php、index.php中调用都不对,修改skins/Vector/VectorTemplate.php可以对登录用户有效,但对匿名用户无效,因为匿名用户访问的是文件缓存,于是尝试修改includes/cache/HTMLFileCache.php,加入以下内容:

require_once dirname(__FILE__).'/in_china_IP2Location.php';
$ip = $_SERVER['REMOTE_ADDR'];
//print "ip=$ip";
$db = new \IP2Location1\Database1(dirname(__FILE__)).'/in_china_IP-COUNTRY.BIN', \IP2Location1\Database1::FILE_IO);
$records = $db->lookup($ip, \IP2Location1\Database1::ALL);
$countryCode = $records['countryCode'];
//print "countryCode=$countryCode";
//$countryCode = 'CN';
if ($countryCode == 'CN') {
  $server_name = $_SERVER['SERVER_NAME'];
  //print "in china true";
  header('HTTP/1.1 403 Forbidden');
  print '403 Forbidden';
  exit;
}

  实测是没有问题的,那个BIN文件以后可能会过时,到时候需要进行更新。

  另外需要说明的是,上面这样做纯粹是为了避免无谓的麻烦,不要故意用于黄赌毒(此处省去1万敏感词)等违法内容。⚠

  上个月去北京遇到的AdSense发布商朋友也有主做海外用户而屏蔽国内IP的,他们做的内容也是英文等多语言内容,放弃国内中文用户对他们来说没有特别影响,还省得各种麻烦,包括老是被采集、抄袭。😤

自由标签:

评论

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。