使用防火牆Discuz 獲取真實IP解決方案

DISCUZ論壇如需啟用論壇自帶的CC防護,請按照如下配置。
使用WAF後,用戶訪問網站的是通過WAF服務器間接訪問網站服務器的,Discuz論壇可能會在獲取用戶IP時,直接獲取WAF的IP,而不能直接獲取到用戶的真實IP,在此提出一些解決方案。
 

解決方法(DZ X2):

1、打開DZ /source/class/class_core.php 文件。
2、找到第341行,或者搜索“HTTP_CLIENT_IP”,找到如下代碼:
function _get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3 }[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) { foreach ($matches[0] AS $xip) { if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) { $ip = $xip; break; } } } return $ip; }
3、將以上代碼修改為:
function _get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3 }[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $ _SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1 ,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } return $ip; }
 

解決方法(DZ X2.5):

1、打開文件\source\class\discuz\discuz_application.php 找到如下代碼:。
private function _get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){ 3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'] , $matches)) { foreach ($matches[0] AS $xip) { if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) { $ ip = $xip; break; } } } return $ip; }
3、將以上代碼修改為:
private function _get_client_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_REAL_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){ 3}[0-9]{1,3}$/', $_SERVER['HTTP_X_REAL_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_REAL_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{ 1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } return $ip; }		
以上操作後,登陸你的Discuz!論壇後台分別清除緩存即可。
 

Discuz! 3.0 可以參照Discuz! 2.5。

  • 0 Корисниците го најдоа ова како корисно
Дали Ви помогна овој одговор?

Понудени резултати

測試您的網站是否有惡意程式

Urlvoid.com 是  NoVirusThanks  這家公司發展的免費服務, 提供了20幾個偵測引擎來偵測網站的安全性,是否有惡意程式值入網站。網址:...

網路設計業者報價台灣的伺服器,是否真的有需要這麼貴嗎?對方告訴我,他們公司設計師習慣在這家伺服器底下工作,這樣是不是客戶就真的沒得挑了呢?

看您的網站需求,而決定空間的種類,假如您網站是多媒體有提供檔案與影音讓人線上觀看或者大型檔案下載,那您可能就需要獨立的伺服器或者VPS,那麼空間的價格可能就會比較貴一點,一般公司的官方網站虛擬主...

VPS、實體主機的代管與非代管之意義為?

代管服務僅對於客戶主機使用cPanel 或 Plesk...

雲端主機代管服務範圍與售價

Pro-Active Managed Support 每月費用為2500 TWD。我們提供主動式積極監控與管理服務(僅限於CentOS+Cpanel)。 服務範圍如下:...

什麼是虛擬主機?

虛擬主機指的是使用者操作一台電腦提供放置檔案的空間....