您在這裡

部分網站屏蔽來自中國大陸的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 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。