使用防火牆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 gebruikers vonden dit artikel nuttig
Was dit antwoord nuttig?

Gerelateerde artikelen

網頁無法瀏覽?? 檢測主機是否正常運行及網頁的瀏覽速度

為什麼常常無法開啟網頁 ? 連管理介面有時候也都換斷線 ? 在無法瀏覽時您是否有查看主機是否正常運行?...

Discuz 7.0版塊橫排顯示版塊圖標和版塊簡介的方法

一、顯示板塊圖標1.找到templates\\default\\discuz.htm2.查找:<th...

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

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

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

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

.htaccess: 重寫規則工作一貫的子域和子目錄

有沒有辦法讓規則適用於子域和子目錄?可參考下列範例自行修改 Options+FollowSymlinks-MultiViews RewriteEngineOn...