發佈日期: 發佈留言

WordPress 國家阻擋:直接在 wp-config.php 築起最強防護牆

【實測分享】徹底解決 WordPress 國家阻擋:直接在 wp-config.php 築起最強防護牆

身為 WordPress 網站管理員,為了擋住來自特定國家的暴力破解攻擊,我們通常會安裝 IP2Location Country Blocker 等地理位置封鎖外掛。

但你是否發現:明明設定了阻擋,某些國家的訪客(如墨西哥 Mega Cable)卻依然能看到後台登入頁面?

為什麼外掛會「攔截失效」?

  • 快取攔截:大部分外掛運作在 WordPress 載入後期。如果你有使用 Cache 或 Rocket,伺服器會直接吐出靜態頁面,導致 PHP 外掛根本沒機會執行。
  • 加載順位:外掛加載時,攻擊腳本可能已經完成初步掃描。

最強解法:在「第一關」就把門鎖死

直接在 wp-config.php 寫入邏輯,借用 IP2Location 外掛已有的資料庫,在 WordPress 核心啟動前就完成身分驗證。這是在 PHP 層級所能做到最高效率的攔截。


🛠️ 實戰代碼:白名單防禦機制

這段代碼的運作原理:只允許特定國家(如台灣、日本)與指定固定 IP 進入後台,其餘通通封鎖。

/* --- [ipinfo.io 雲端識別版] 僅限特定地區訪問後台 --- */
// 檢查是否為系統路徑,使用斜線與關鍵字組合以精準匹配
if (
    strpos($_SERVER['REQUEST_URI'], '/wp-login.php') !== false || 
    strpos($_SERVER['REQUEST_URI'], '/wp-admin/') !== false || 
    strpos($_SERVER['REQUEST_URI'], '/xmlrpc.php') !== false
) {

    // 1. 取得訪客 IP (採用最穩定的字串處理,預防 PHP 8 錯誤)
    $v_ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] !== '') {
        $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $v_ip = trim((string)$ips[0]); // 關鍵修正:明確指定索引並轉為字串
    }

    // 2. 【優先白名單】固定 IP 直接放行
    $trusted = array('::1', '127.0.0.1', '123.123.123.123');
    if (in_array($v_ip, $trusted)) {
        // 放行,不執行後續 cURL 節省資源
    } else {
        // 3. 採用您成功的 ipinfo.io 範例邏輯
        $country = '未知';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://ipinfo.io/{$v_ip}/json");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        $response = curl_exec($ch);
        curl_close($ch);

        if ($response !== false) {
            $data = json_decode($response, true);
            if (!empty($data['country'])) {
                $country = strtoupper($data['country']);
            }
        }

        // 4. 判斷國家白名單 (台灣、日本)
        $allowed = array('TW', 'JP');
        if (!in_array($country, $allowed)) {
            header('HTTP/1.1 403 Forbidden');
            header('Content-Type: text/html; charset=utf-8');
            exit("存取被拒:您所在的國家 ($country) 未經授權訪問。您的 IP: $v_ip");
        }
    }
}
/* --- 結束 --- */

💡 為什麼這個作法更強大?

  1. 突破快取:寫在 wp-config.php 優先級最高,快取外掛還沒啟動前就已經攔截完成。
  2. 節省資源:不符合條件的請求會立即中斷,不需載入完整的 WordPress 核心檔案。
  3. 自動容錯:內建檔案檢查,萬一解除外掛,網站也不會因為找不到檔案而報錯。

對於網站安全防護,「拒敵於國門之外」永遠是最高準則。如果你也被頻繁的跨國攻擊困擾,試試這個防線前移的終極方案吧!

本頁連結(1351454661):WordPress 國家阻擋:直接在 wp-config.php 築起最強防護牆

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料