使用防火牆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 Utilizadores acharam útil
Esta resposta foi útil?

Artigos Relacionados

我訂的是亞州機房,為何會顯示是美國IP?

要判定機房位置,可從Ping/Trace Route 來查詢。若在亞州對亞州國家連線之ping值 一定會小於100ms,而亞州對美國之ping 值一定會大於100ms。這是重要的判斷依據。...

什麼是虛擬主機?

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

什麼是FTP?

FTP 檔案標準傳輸協定. 簡單來說它是一個方便的工具,可以用來移動一台電腦的檔案至另外一台電腦注意!FTP 在fantastic-host.net 虛擬主機方案中的連接阜(port)均為21

網頁出現無效的伺服器憑證?! (google chrome)

請檢查一下電腦的系統時間是不是跑掉了,或瀏覽器設定→進階選項→HTTPS/SSL→不要打勾,檢查伺服器憑證撤銷即可解決。...

去除Discuz7.0有無新帖版塊圖標

打開模板文件 css_common.htm,找到如下代碼: .list th { background: url({IMGDIR}/forum.gif) 5px 10px no-repeat;...