一個讓無數 WordPress 站長困惑的問題
如果您正在管理 WordPress 網站,您很可能遇過這個情況:明明已經透過 Cloudflare WAF(Web Application Firewall)或其他防火牆規則,將 /wp-login.php 的存取限制到只有特定 IP 才能訪問,甚至完全封鎖了該路徑,但每當您打開 Wordfence 的 Live Traffic 或 Login Security 報告時,依然會看見源源不絕的登入嘗試紀錄。
「攻擊不是已經被擋在 Cloudflare 那一層了嗎?為什麼還會有這麼多失敗登入紀錄?」
這個問題在我們 EBuildHost 為香港客戶提供 WordPress 主機支援的過程中,幾乎每週都會被問到一次。今天我們就來徹底拆解這個現象,並在文末提供一個由我們團隊開發的免費診斷插件 Login Attempt Logger,協助您一勞永逸找出真正的攻擊入口。
一、為什麼 WAF 規則「看起來沒效」?
許多站長以為只要在 Cloudflare 加上一條 Firewall Rule 阻擋 wp-login.php,整個 WordPress 的登入攻擊就會消失。但實際上,攻擊者的手段遠比這複雜。以下是我們在實戰中觀察到的幾個常見原因:
1. 攻擊者根本沒走 wp-login.php
WordPress 的登入機制不只一個入口。除了大家熟知的 wp-login.php,還有以下幾個常被忽略的攻擊面:
- XML-RPC 介面(xmlrpc.php):這是早期用於遠端發文的協議,至今仍預設開啟。攻擊者可以透過
system.multicall方法,在單次請求中嘗試數百組帳密組合,效率比直接攻擊wp-login.php高出數十倍。 - REST API 端點:例如
/wp-json/wp/v2/users可能洩露使用者名稱,攻擊者再針對這些帳號進行字典攻擊。某些自訂端點若帶有 Authorization 標頭,也是常見的暴力破解目標。 - 第三方表單外掛:WooCommerce 的客戶登入頁、會員系統外掛(如 Ultimate Member、MemberPress)、自訂登入頁外掛(如 Theme My Login)都會建立獨立的登入端點。
- AJAX 端點:某些主題或外掛會透過
admin-ajax.php處理登入邏輯,這個路徑通常不會被 WAF 規則涵蓋。
2. WAF 規則的繞過手法
即使您封鎖了 /wp-login.php,仍可能存在繞道方式:
- 直接 POST 到伺服器 IP(繞過 Cloudflare):如果您沒有設定 Cloudflare 的 Authenticated Origin Pull 或在主機端限制只接受 Cloudflare IP,攻擊者可以直接連到 origin server。
- URL 大小寫變化、加上查詢字串(如
wp-login.php?redirect_to=...)、或使用編碼技巧繞過簡單的字串比對規則。 - 透過快取的舊 DNS 解析或歷史紀錄找到原始 IP 直接連線。
3. Wordfence 紀錄的是「到達 WordPress 的請求」
這一點非常關鍵。Wordfence 是 WordPress 內部的安全外掛,它能看見的是「已經穿過 Cloudflare、到達您的伺服器、並進入 WordPress 處理流程的請求」。換句話說,如果 Wordfence 還在持續記錄登入失敗,就代表這些請求確實繞過了您的 WAF,而不是您的規則無效。
問題是:Wordfence 預設只記錄 wp-login.php 和 xmlrpc.php 的登入嘗試。如果攻擊發生在其他端點(例如 WooCommerce 的 my-account 頁面或 REST API),您可能根本看不到完整的攻擊軌跡。
二、傳統排查方式的盲點
當客戶反映這類問題時,我們最初也是按部就班地檢查:Cloudflare 的 Firewall Events、伺服器的 access log、Wordfence 的 Live Traffic、WordPress 的登入失敗紀錄。
但問題在於,這些資料散落在不同系統,格式不一、時間戳記時區不同、欄位也不對齊。要拼湊出完整的攻擊路徑,往往需要花上半天時間,而且容易遺漏關鍵線索。
更麻煩的是,當攻擊者使用旋轉 IP(例如透過殭屍網路或代理池)時,單純看 IP 黑名單意義不大。我們需要知道的是:哪一個 URL 正在被攻擊、使用什麼 HTTP Method、嘗試的使用者名稱是什麼、User-Agent 與 Referer 是什麼,以及這些事件發生的精確時間軸。
三、EBuildHost 自製診斷插件:Login Attempt Logger
為了解決這個問題,我們的技術團隊開發了一個輕量級的 WordPress 診斷插件 Login Attempt Logger(登入稽核紀錄),目前已更新到 2.0.0 版本,專門用來完整捕捉所有可能的登入相關活動,協助您快速定位真正的攻擊入口。
它不是另一個防火牆,也不取代 Wordfence。它的角色是「鑑識記錄器(Forensics Logger)」——把分散在各個攻擊面的登入事件,集中、加密、結構化地記錄下來,讓您一眼看穿攻擊真相。
它會記錄哪五類事件?
插件會自動捕捉以下五類關鍵事件,這正是其他安全外掛容易遺漏的盲區:
| 事件類型 | 觸發時機 |
|---|---|
| 登入頁請求 | wp-login.php 收到 POST 登入請求 |
| 登入失敗 | 帳號或密碼錯誤 |
| 登入成功 | 登入驗證通過(含 User ID、角色) |
| XML-RPC | 遠端發文、取得使用者資訊等 XML-RPC 認證呼叫 |
| REST API | 帶有 Authorization 標頭且認證失敗時 |
每一筆紀錄包含的完整資訊
每一筆事件都會記錄以下欄位,讓您拼出完整的攻擊軌跡:
- EVENT — 事件類型
- DATETIME — 精確時間戳記
- IP — 來源 IP(自動處理 Cloudflare 等反向代理的真實 IP)
- URL — 被請求的完整 URL
- METHOD — HTTP 方法(GET/POST 等)
- USERNAME — 嘗試使用的帳號名稱
- USER-AGENT — 瀏覽器或工具識別字串
- REFERER — 來源頁面
- Accept-Language — 語系標頭(用於識別自動化工具)
- 補充說明(登入成功時的使用者 ID 與角色)
隱私保護: 插件絕不記錄密碼。URL 中的敏感查詢參數(如 token、nonce)會自動遮罩。
真實案例:十五分鐘找出真兇
舉一個我們真實處理過的案例:某客戶的 Wordfence 每天顯示上千筆登入失敗,但 Cloudflare 規則明明已經封鎖了 wp-login.php。在啟用我們的診斷插件後,只花了15分鐘就發現這次所有攻擊請求都指向 /xmlrpc.php,而 Referer 全部偽裝成 https://wordpress.com/、User-Agent 則使用看似正常的瀏覽器字串。這明顯是攻擊者透過 XML-RPC 的 system.multicall 方法進行批次帳密爆破,而非走傳統登入頁,並且刻意偽造 Referer 來規避簡單的來源檢查規則。
問題定位後,只需要在 Cloudflare 加上一條封鎖 /xmlrpc.php 的規則(或對該路徑啟用嚴格的速率限制),攻擊量瞬間歸零。
如果沒有這份完整紀錄,您可能會繼續加強 wp-login.php 的防護,卻完全沒有處理到真正的攻擊面。
四、為什麼 Login Attempt Logger 比一般 logger 更可靠?
許多免費的登入紀錄外掛都存在一些隱患:寫入資料庫導致網站變慢、紀錄以明文儲存可能洩露資料、沒有自動清理機制造成磁碟爆滿。我們在設計 Login Attempt Logger 時,特別解決了這幾個痛點:
採用 AES-256-GCM 加密儲存
所有新寫入的稽核紀錄都會以 AES-256-GCM 加密後存放於受保護的目錄中。即使有人透過某些路徑直接存取檔案(例如 Nginx 環境下的設定漏洞),也只能看到無法解讀的密文,不會洩漏 IP、帳號等敏感資料。
不使用資料庫,零負擔
插件完全不寫入 WordPress 資料庫,採用獨立的檔案儲存方式。這帶來幾個好處:
- 不影響
wp_options或其他資料表大小 - 大量攻擊湧入時不會拖慢資料庫
- 即使插件停用,網站效能也不會受影響
- 備份資料庫時不會夾帶大量稽核紀錄
內建防濫用與節流機制
- 同一 IP 的重複事件設有寫入節流(預設 60 秒),避免攻擊者用 DDoS 灌爆您的紀錄檔
- 登入頁的單純 GET 請求、機器人掃描不會大量寫入
- 單一紀錄欄位長度有限制,防止惡意請求塞爆檔案
自動生命週期管理
插件會自動處理紀錄檔的輪替與清理,您不需要手動維護:
| 機制 | 預設值 |
|---|---|
| 單檔大小上限 | 10 MB(超過自動輪替) |
| 月檔保留數量 | 12 個月 |
| Archived 保留數量 | 24 個 |
嚴格的存取控制
- 後台檢視、篩選、下載、刪除均需 管理員權限(
manage_options)與 安全 nonce 驗證 - 儲存目錄優先放在網站根目錄外的私有路徑
- 自動建立
.htaccess(Apache)與web.config(IIS)防護檔
五、後台介面:3 分鐘上手的稽核工具
啟用插件後,只需到 設定 → 登入稽核,即可看到所有功能:
強大的篩選功能
進入單一紀錄檔詳情,可以使用:
- 事件類型篩選(只看登入失敗、只看 XML-RPC 等)
- 關鍵字搜尋(IP、帳號、URL、User-Agent 任意欄位)
- 日期範圍篩選
- 每頁 20 筆翻頁瀏覽,點「展開」查看完整 METHOD、User-Agent、Referer
兩種檢視模式
- 表格檢視:適合日常稽核與篩選
- 原始文字檢視:解密後的完整文字格式,方便複製與人工比對


一鍵下載 .log 檔
需要交給 IT 同事或主機商分析?直接點下載按鈕,系統會輸出解密後的可讀 .log 檔。下載過程同樣需通過管理員身份驗證,無法由公開 URL 直接取得明文。
六、典型使用情境
情境一:排查暴力破解
- 開啟當月紀錄檔 → 檢視
- 事件類型選「登入失敗」
- 依 IP 或帳號排序,立刻看出短時間內大量失敗的來源
- 將該 IP 或網段加入 Cloudflare 黑名單
情境二:確認帳號是否被盜
- 事件類型選「登入成功」
- 核對 IP、時間、User-Agent 是否與您的實際操作一致
- 發現可疑的成功登入立即更換密碼並啟用 2FA
情境三:診斷 Cloudflare 規則是否生效
- 設定 WAF 規則後,過幾小時回來檢視紀錄
- 若仍有來自境外 IP 的登入嘗試,代表規則未涵蓋全部入口
- 透過紀錄中的 URL 欄位,找出真正的攻擊路徑加以補強
情境四:交付稽核報告
- 點選下載當月紀錄
- 取得明文
.log檔案 - 以文字編輯器或專業日誌分析工具(如 GoAccess、Splunk)進一步分析
七、系統需求
| 項目 | 要求 |
|---|---|
| WordPress | 建議 5.8 或以上 |
| PHP | 7.4 或以上 |
| PHP 擴充 | OpenSSL(用於加密) |
| 權限 | 僅網站管理員可存取 |
支援 Cloudflare、Nginx 反向代理環境(自動辨識真實 IP)。對於進階使用者,也提供完整的 filter hook,可自訂儲存目錄、可信代理 IP 等選項。
八、如何免費取得 Login Attempt Logger?
我們將這個原本只供內部客戶使用的工具,免費提供給所有關注 WordPress 安全的香港站長與開發者。由於我們希望持續優化這個工具,並向使用者推送版本更新與安全性改進通知,因此採用 Email 索取的方式提供下載連結。
索取方式
請在下方表單填寫您的 Email,系統會即時驗證並在頁面上直接顯示下載連結,無需等待郵件、無需檢查垃圾信箱。
填寫後,您將立即取得:
- Login Attempt Logger 2.0.0 插件下載連結(ZIP 格式,可直接於 WordPress 後台「外掛 → 安裝外掛 → 上傳外掛」)
- 安裝與設定快速上手指南
- 常見攻擊樣態解讀手冊(教您怎麼看懂紀錄)
- Cloudflare WAF 與 Login Attempt Logger 搭配使用建議
索取 Login Attempt Logger 診斷插件
九、結語:看不見的攻擊,比看得見的更危險
WordPress 的攻擊面遠比一般站長想像中廣泛。當您只盯著 wp-login.php 時,攻擊者可能早已透過 XML-RPC、REST API 或第三方外掛的端點悄悄滲透。Wordfence 持續顯示登入嘗試,並不代表您的 WAF 失效,而是在告訴您「還有其他入口您沒有注意到」。
與其盲目疊加防護規則,不如先把「敵人從哪裡進來」這件事情徹底搞清楚。這就是我們開發 Login Attempt Logger 的初衷——讓您看見原本看不見的攻擊軌跡,並用加密、零資料庫、自動清理的設計,確保這個診斷工具本身不會成為新的安全或效能負擔。
如果您希望進一步了解 EBuildHost 提供的香港本地 WordPress 主機服務、24/7 中文技術支援,或是需要我們的工程團隊協助分析您的紀錄檔,歡迎隨時聯絡我們。
立即在上方填寫 Email,開始找出您網站的真正攻擊入口。




