【實測分享】徹底解決 WordPress 國家阻擋:直接在 wp-config.php 築起最強防護牆
身為 WordPress 網站管理員,為了擋住來自特定國家的暴力破解攻擊,我們通常會安裝 IP2Location Country Blocker 等地理位置封鎖外掛。
但你是否發現:明明設定了阻擋,某些國家的訪客(如墨西哥 Mega Cable)卻依然能看到後台登入頁面?
為什麼外掛會「攔截失效」?
- 快取攔截:大部分外掛運作在 WordPress 載入後期。如果你有使用 Cache 或 Rocket,伺服器會直接吐出靜態頁面,導致 PHP 外掛根本沒機會執行。
- 加載順位:外掛加載時,攻擊腳本可能已經完成初步掃描。
最強解法:在「第一關」就把門鎖死
直接在 wp-config.php 寫入邏輯,借用 IP2Location 外掛已有的資料庫,在 WordPress 核心啟動前就完成身分驗證。這是在 PHP 層級所能做到最高效率的攔截。
🛠️ 實戰代碼:白名單防禦機制
這段代碼的運作原理:只允許特定國家(如台灣、日本)與指定固定 IP 進入後台,其餘通通封鎖。
/* --- [技術分享] 僅允許白名單國家或特定 IP 訪問後台 --- */
$ip2_plugin_path = __DIR__ . '/wp-content/plugins/ip2location-country-blocker';
$ip2_class_file = $ip2_plugin_path . '/includes/class-ip2location-php.php';
$ip2_db_file = $ip2_plugin_path . '/databases/IP2LOCATION-LITE-DB1.BIN';
// 判斷:僅在訪問後台/登入頁,且所需外掛檔案皆存在時才執行
if ((strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false || strpos($_SERVER['REQUEST_URI'], 'wp-admin') !== false)
&& file_exists($ip2_class_file)
&& file_exists($ip2_db_file)) {
try {
require_once($ip2_class_file);
$visitor_ip = $_SERVER['REMOTE_ADDR'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$visitor_ip = trim($ips[0]);
}
// 1. 【固定 IP 白名單】檢查 (包含本機與指定工程師 IP)
$trusted_ips = array('::1', '127.0.0.1', '123.123.123.123');
if (in_array($visitor_ip, $trusted_ips)) {
return;
}
// 2. 【國家地理位置】檢查
$db = new \IP2Location\Database($ip2_db_file, \IP2Location\Database::FILE_IO);
$records = $db->lookup($visitor_ip, \IP2Location\Database::ALL);
$country_code = $records['countryCode'];
// 【國家白名單設定】TW = 台灣, JP = 日本
$allowed_countries = array('TW', 'JP');
if (!in_array($country_code, $allowed_countries)) {
header('HTTP/1.1 403 Forbidden');
header('Content-Type: text/html; charset=utf-8');
exit("Access Denied: 您的 IP ($visitor_ip) 或地區 ($country_code) 未經授權訪問後台。");
}
} catch (Exception $e) {
// 出錯時靜默跳過,確保管理員不被意外鎖死
}
}
💡 為什麼這個作法更強大?
- 突破快取:寫在 wp-config.php 優先級最高,快取外掛還沒啟動前就已經攔截完成。
- 節省資源:不符合條件的請求會立即中斷,不需載入完整的 WordPress 核心檔案。
- 自動容錯:內建檔案檢查,萬一解除外掛,網站也不會因為找不到檔案而報錯。
對於網站安全防護,「拒敵於國門之外」永遠是最高準則。如果你也被頻繁的跨國攻擊困擾,試試這個防線前移的終極方案吧!
本頁連結(1728544192):WordPress 國家阻擋:直接在 wp-config.php 築起最強防護牆
