被駭過的 WordPress 網站只要全部重裝就沒問題了嗎?


昨天在處理一位客戶主機被駭過重灌之後,CPU 還是異常飆高的狀態,但因為主機權限不在客戶這邊,僅能就有限的資訊來進行評估 CPU 飆高的問題,為了避免你的客戶可能也遇到類似的問題,我整理了幾個 WP 網站容易被攻擊的地方以及對應方式~

一、弱密碼檢查:駭客最便宜的入侵方式

弱密碼指的是被列在常見密碼字典裡的那種——admin123P@ssw0rd你的網站名+2024,攻擊者不會猜你的密碼,他們會拿一份幾百萬筆的字典檔對你的登入頁瘋狂測試,直到猜對為止。

WordPress 預設有個叫 wp-login.php 的登入頁,全世界都知道在哪,攻擊者每天用機器人跑遍所有 WordPress 站台,掃出弱密碼的帳號就能直接登入。

如何預防弱密碼攻擊

對不想碰命令列的站長來說,三個外掛任選一個就能解決:

Solid Security

https://tw.wordpress.org/plugins/better-wp-security/

免費版就有「Weak Password Detection」功能,啟用後它會引導你進行一連串的登入防護設定,任何使用弱密碼的使用者下次登入會強制要求改密碼,不改就不能進後台。

Wordfence

https://tw.wordpress.org/plugins/wordfence/

免費版的 Scan 功能會自動掃描所有使用者,比對他們提供的資料庫,如果你的密碼在歷史外洩事件裡出現過,會直接在掃描報告標紅,Pro 版額外提供密碼字典攻擊模擬。

Jetpack Protect

https://tw.wordpress.org/plugins/jetpack-protect/

由 Automattic 官方出品,背後接的是業界知名的 WPScan 漏洞資料庫(超過 21,000 筆已知漏洞)。免費版會自動掃描你站上所有外掛、主題、WordPress 核心版本,發現有漏洞的元件直接通知。原本的 WPScan WordPress 外掛已經不再為一般使用者提供支援,官方推薦改用這個。

弱密碼這部分它沒有獨立 UI,但配合 Solid Security 或 Wordfence 的弱密碼檢測,搭配 Jetpack Protect 的外掛漏洞掃描,可以涵蓋登入端與漏洞端兩個面向。

選擇建議:一般站長裝 Solid Security 或 Wordfence 就夠用,再加裝 Jetpack Protect 補上漏洞掃描的部分。

順手做一件事:刪掉可疑帳號

掃完弱密碼之後,順便進後台 → 使用者 → 全部使用者,看看有沒有不該存在的管理員。常見的後門帳號特徵:

  • 帳號名稱很怪(像 wp-configadmin2support
  • 最近才註冊但你不記得加過
  • email 是你不認識的網域

看到這種帳號直接刪掉,並把該帳號發過的文章重新指派給你自己。如果你光是看到使用者列表裡有 5 個叫 admin 的帳號就一頭霧水——那很可能你已經被入侵了,這些都是駭客自己加的。

預防勝於檢查

不管哪一派,最後都要走到同一步:把密碼政策設好。其實前面提到的 Solid Security 免費版就內建完整的 Password Requirements 設定,可以強制:

  • 最少 16 字元
  • 必須混合大小寫、數字、特殊符號
  • 90 天強制更換
  • 禁止重複使用過去用過的密碼

啟用並設完成後,未來新密碼就不會再掉進弱密碼陷阱。Wordfence 也有類似功能在 Login Security → Settings 裡,看你裝哪個就用哪個的設定,不需要再多裝一個外掛。

二、檔案完整性比對:你的程式碼有沒有被偷偷改過

第二個風險更隱蔽,攻擊者進來之後不會馬上破壞你的網站,他們會在你的主題或外掛裡塞一段惡意程式碼,可能是:

  • SEO Spam(在你的頁面塞滿賣假包包的連結)
  • 後門程式(讓他下次可以直接進來)
  • 加密貨幣挖礦腳本(用你的訪客電腦挖礦)

問題是,這些程式碼藏在 wp-content/plugins/ 底下幾百個檔案裡的某一行,你怎麼知道哪裡被改了?

工具一:WordPress 官方核心檔案校驗

WordPress 官方對核心檔案有提供校驗碼。用 wp-cli 跑:

wp core verify-checksums

它會把你網站上的 WordPress 核心檔案逐一比對官方版本,如果有任何一個檔案被動過會跳出來提醒你,外掛部分可以用 wp plugin verify-checksums --all

工具二:GitHub 上的 wp-cli/checksum-command

這是 wp-cli 的官方擴充,安裝方式:

wp package install wp-cli/checksum-command

裝完之後就能對所有外掛、主題做完整性比對,對於沒在官方 WordPress.org 倉庫的付費外掛,這個工具沒辦法檢查,這時候要靠下一個工具。

工具三:手動建立檔案指紋

進階一點的做法是定期把 wp-content/ 整個目錄做一次 hash 紀錄,下次比對如果有差異就知道哪裡被改了,但這對非工程背景的站長來說已經是另一個世界,這部分通常會由維護方代為處理。

三、XML-RPC 攻擊:那個你從來沒打開過的後門

XML-RPC 是 WordPress 一個老舊的遠端呼叫介面,原本設計給手機 App、Pingback、Trackback 用,問題是你 99% 不會用到它,但它預設是開的。

攻擊者愛它的原因是:透過 XML-RPC 的 system.multicall 功能,他們可以一次測試 500 組密碼,是直接打 wp-login.php 的 500 倍效率。等於用 1/500 的時間就能破解你的弱密碼。

怎麼檢查自己有沒有開

打開瀏覽器,把網址換成你的網站加上 /xmlrpc.php

https://你的網站.com/xmlrpc.php

如果看到「XML-RPC server accepts POST requests only.」這行字,代表它是開的。

關閉的方法(三選一)

  1. 裝外掛:「Disable XML-RPC」這類外掛,安裝啟用就完成
  2. .htaccess:在裡面加一段規則擋掉 xmlrpc.php 的請求
  3. 主機層級擋掉:請主機商或工程師處理,最徹底

如果你完全沒用過 Jetpack 或 WordPress 手機 App,直接關掉沒有任何副作用。

四、用 WPScan 做完整的漏洞掃描

WPScan 是業界最常用的 WordPress 漏洞掃描器,開源、免費、技術人員實務都在用,我介紹它不是要每個站長都自己跑,而是讓你知道專業的健檢長什麼樣,以及它能查出哪些前面外掛掃不到的東西。

GitHub 連結:github.com/wpscanteam/wpscan

它由 Ruby 寫成,背後維護一個專屬的 WordPress 漏洞資料庫(WPVulnDB),收錄了核心、外掛、主題的所有已知 CVE,免費版每天可以查 25 次外掛漏洞,對單一站台的健檢來說綽綽有餘。

安裝

macOS(已裝 Homebrew):

brew install wpscan

Linux(Ubuntu/Debian):

sudo apt install ruby ruby-dev
sudo gem install wpscan

也可以直接用官方 Docker image:

docker pull wpscanteam/wpscan
docker run --rm wpscanteam/wpscan --url https://你的網站.com

裝完之後,去 wpscan.com 註冊一個免費帳號,會拿到 API token。後面所有需要查漏洞庫的指令都要加上 --api-token=你的token

用法一:基本掃描

wpscan --url https://你的網站.com --api-token=你的token

跑完會列出 WordPress 版本、主題、暴露的檔案、發現的使用者名稱、以及對應的 CVE 漏洞清單,如果你的站台是電商或會員制,建議在凌晨流量低時跑,避免被 WAF 擋下。

用法二:列出所有外掛

wpscan --url https://你的網站.com --enumerate p --api-token=你的token

--enumerate p 會列出能偵測到的所有外掛(passive 模式),要挖更深加 --enumerate ap(aggressive,會送更多請求):

wpscan --url https://你的網站.com --enumerate ap --api-token=你的token

aggressive 模式會掃出 vulnerable plugins、popular plugins、所有偵測得到的版本,但會送幾千次請求,請確認你有權限掃這個站。

用法三:找出可登入的使用者名稱

wpscan --url https://你的網站.com --enumerate u

很多 WordPress 站台沒關掉 REST API 或 author archive,攻擊者可以直接列出所有使用者名稱,這個指令幫你站在攻擊者角度看自己有沒有暴露——如果它能列出 admin、editor 這些帳號,駭客也能。

對策是裝 Stop User Enumeration 外掛或在 nginx/.htaccess 擋掉 ?author= 參數。

用法四:模擬密碼字典攻擊

wpscan --url https://你的網站.com \
--usernames admin,editor \
--passwords /path/to/passwords.txt \
--max-threads 5

這是滲透測試常用的指令:拿一份密碼字典(網路上找 rockyou.txt),對指定的使用者做暴力破解測試,跑完如果有任何一個帳號被破出來,那個帳號的密碼就是字典裡的那一行。

--max-threads 5 限制同時連線數,不要設太高,會被主機 firewall 鎖 IP。

用法五:把報告存成 JSON 給工程師

wpscan --url https://你的網站.com \
--api-token=你的token \
--output report.json \
--format json

JSON 格式方便後續做自動化比對。例如每月跑一次、把結果丟進 diff 工具,就能知道這個月新增了哪些漏洞。

用法六:定期更新漏洞資料庫

WPScan 本機會快取漏洞資料庫,跑掃描前先更新一下:

wpscan --update

這個指令會去 WPVulnDB 拉最新的 CVE 清單,確保你掃出來的結果是最新的。

怎麼讀掃描結果

WPScan 用三種顏色標示風險:

  • 紅色 [!]:有已知漏洞,立刻處理
  • 黃色 [?]:可能有問題,需要進一步確認
  • 綠色 [+]:偵測到的資訊,未必是漏洞

實務上多數站長卡在「掃出來十幾個紅色警告」之後就不知道下一步——哪些是真的會被打、哪些是低風險。這也是為什麼有些人寧可付錢請人解讀報告:工具只告訴你哪裡有洞,不會告訴你「這個洞在你的環境下可不可能被利用」。

五、自己跑工具,還是找人做?

寫到這裡你可能發現一件事——這些工具的安裝步驟看起來都不長,但每一個都假設你會用 SSH、會看錯誤訊息、會自己判斷掃描結果裡哪些是真漏洞、哪些是誤報。

這就是門檻所在。

我整理一下幾種狀況,你可以對號入座:

狀況適合的做法個人部落格、無金流裝 Wordfence 免費版 + 關掉 XML-RPC 即可公司官網、無會員資料加上強制密碼政策 + 每月跑一次 WPScan 外掛掃描電商、有客戶資料上述全部 + 定期檔案完整性比對 + 安全事件處理流程已經被入侵過別自己救,找人來做完整清查

最後一項特別重要,已經被植入後門的站台,自己刪掉看到的惡意檔案通常沒用,駭客會在你看不到的地方留好幾個備援,我們看過最棘手的案例是站長以為清乾淨了,結果三天後又被植入廣告,因為主機層級已經被攻陷,駭客拿到系統權限,而這很有可能就是我昨天遇到的狀況。


整理一下

WordPress 安全防護的三個核心動作:

  1. 弱密碼檢查 — 把 admin 帳號刪掉、強制 16 字元以上密碼
  2. 檔案完整性 — 用 wp core verify-checksums 定期比對核心檔案,外掛用 wp plugin verify-checksums --all
  3. 關掉 XML-RPC — 99% 的網站根本不需要它,預設打開純粹是技術債

如果你看到這裡發現自己連 SSH 怎麼連都不知道,那大概你也不會想花一個週末研究這些指令,這時候找人做兩小時就解決,會比你自己摸索三週還划算。

我們有提供 WordPress 安全健檢服務,會跑完上述所有檢查項目,附上一份白話的報告告訴你網站現在的狀態、哪些地方有風險、優先處理順序是什麼。有興趣的話與我們聯絡吧。

WordPress 開發日常

Read more from WordPress 開發日常

昨天下午跑去臺北中山地下街想說放空一下抽離每天的日常工作,結果逛書店逛到一半,旁邊走過的兩個人開始在高談闊論,聊著關於 AI 上下文超過 50% 能力表現就會開始衰退的話題,害我都很想過去跟著討論一番XD Typeless 不只是語音輸入工具,更是 AI 助理 語音輸入軟體 Typeless 的方便性應該不用我再多說了,有很多朋友應該都有在用,但最近我發現了幾個進階的用法,能夠再進一步提升我的 AI coding 效率甚至是平常的文書作業。首先是「隨便問」這個功能,Mac 上預設的快速鍵是 Fn + Space,我發現它有以下用法: 一、潤飾文字稿 當我語音輸入完、想要把輸入好的內容再重新順一下時,我可以直接把剛剛輸入的文字選取起來,然後使用 Fn + Space 跟它說:「請幫我潤飾一下這段文字,並且幫我把原始文字括號,讓我知道你修改了哪些地方。」 二、深度分析與摘要 當你面對冗長的文件、複雜的報告或大量的資訊時,不必逐字閱讀。只需將內容選取後呼叫「隨便問」,它便能迅速為你梳理出核心論點、關鍵數據及邏輯架構,並將繁瑣的資訊轉化為簡潔易懂的重點摘要。 三、網頁搜尋...

最近在讀一本書叫做《Vibe Coding 聖經》,在現在 AI 相關的書籍多到爆炸的狀況下,很容易就覺得這只是另外一本在教人用 AI 寫 Code 的過時書籍而略過,但讓我眼睛一亮的是本書的其中一位共同作者 Gene Kim 是我超愛的一本軟體專案管理小說神作《鳳凰專案》的作者,他與另一位骨灰級工程師合著,因此二話不說就立刻買回來看。 這本書是 2025 年中出版的。在那個時間點,Vibe Coding 的說法剛出來不久,所以第一章的篇幅著墨在說服還沒有嘗試過 Vibe Coding 的工程師來實際體驗看看,書中舉了很多矽谷創業圈的例子來佐證,證明 Vibe Coding 是真的會改變軟體設計的一種典範轉移。 Kim 也提到有很多早就因為寫不下去程式碼而離開這個產業的工程師,因為這一波 Vibe Coding 的浪潮又重新找回軟體開發的樂趣,其中就包含他自己。他的本業是協助企業來如何透過 IT 來管理企業,而《鳳凰專案》這本書在講的就是這個的主題。 《Vibe Coding 聖經》提到 AI 協作開發把工程師最討厭的瑣事像是除錯、寫測試、部署流程全部都外包給...

上一次也是第一次參加鐵人賽是 2021 年,因為受到社群夥伴 Eric 的邀約,我寫了關於接案以及 WooCommerce 金流串接的主題,雖然只有得到全勤獎且壓力爆棚,但還是靠著意志力完成這個累死人不償命的比賽。 IT 鐵人賽是由台灣最大的技術開發社群 IT邦每年都會舉辦的線上活動,邀請所有技術產業的從業人員把他們的研究心得或是實作經驗以連續三十天的頻率發表出來,挑戰前可以選擇要投稿的題目,剩下的就是在半夜 12 點前準時發文,如果遲了一分鐘挑戰就算失敗。 當年參賽挑了一個我很害怕的主題:WooCommerce 金流串接,這是我自學程式的大魔王關卡,很大一部分是因爲當年閱讀技術文件非常吃力,然後 WooCommerce 的 API 又有很多看不懂的寫法,我想用鐵人賽來克服心魔。 這是我當年參賽後的心得:「參賽前我一直很擔心自己沒有辦法寫完這三十天,不停的在懷疑自己是否有辦法辦到,但就跟做很多一開始覺得很困難的案子一樣,頭洗下去之後就會慢慢看得到終點了,今天的我感覺自己突破了很大的一關!」...