WordPress網站安全

WordPress 網站安全設定:上線前後必做的檢查清單

約 8 分鐘

很多網站主以為裝好佈景與外掛、上線就沒事了。但針對 WordPress 的攻擊絕大多數是全自動的:機器人整天在掃過期外掛、掃登入頁、掃弱密碼。它們不在乎你的公司大小,只在乎你有沒有留破口。好消息是,這些自動化攻擊多半只吃「軟柿子」。把基本功做好,你就不在名單上。以下這份清單,分成上線前的設定與上線後的維運,每一節都給你可以照著打勾的項目。

1. 核心、佈景與外掛:先更新,再精簡

過期元件是 WordPress 被入侵最常見的原因,對應 OWASP Top 10 的 A06(使用含已知弱點的元件)。攻擊者拿的是公開的漏洞資料庫,你的網站只要慢一步更新,就是現成目標。

更新的節奏可以很簡單。每個月固定挑一天檢查有沒有新版本,看到標示為安全性(security)的更新就盡快上,不要排到下個月。動手之前先做一次完整備份,並盡量選在離峰時間,或先在測試環境跑一次。這樣萬一更新後版面跑掉,你有退路。

更新之外,精簡同樣重要。短期內不會用到的外掛與佈景直接刪掉,不要只是停用。佈景只留一套正在使用的,再加一套官方預設佈景當備援就好。安裝時留下的測試頁面、範例內容,還有 readme.html 這種會洩漏版本號的檔案,也一併清掉。

2. 登入與後台強化:堵住暴力破解

wp-login.php 是機器人最愛敲的門,它們拿字典檔一組一組帳密試。這一關的重點是讓「猜」變得沒有效益。

第一件事是換掉預設帳號。不要用 admin,也不要拿網域名稱當管理員帳號。已經有 admin 的話,先另外建一個管理員帳號,確認登得進去之後再把 admin 刪掉。密碼至少 16 碼、隨機產生、存在密碼管理器裡,而且不要跟其他服務共用。

第二件事是加一道密碼以外的關卡。後台開啟兩步驟驗證(2FA),至少對所有管理員與編輯角色強制啟用。就算密碼真的被猜到,對方手上沒有第二個因素也進不來。

第三件事是讓機器人試不動。限制登入嘗試次數,例如連續五次失敗就鎖一段時間,同時把來源 IP 記下來。再把預設的登入路徑換掉或隱藏起來,多數自動化工具只認 wp-login.php,找不到門就會去找下一個目標。如果網站沒有 App 或外部串接需求,順手把 XML-RPC 關掉,那是另一個常被拿來放大暴力破解的入口。

3. 使用者角色與最小權限

很多網站每個人都給管理員,這等於把整棟樓的鑰匙發給所有人。WordPress 內建的角色分級就是為了最小權限而設計:一個人只給他工作真正需要的權限。帳號越少、權限越低,被盜用之後的災情就越小。

角色適合給誰能做什麼
管理員真正需要裝外掛、改設定的人,越少越好全站設定、外掛與佈景、使用者管理
編輯負責內容品質、要審別人稿子的人發布與編輯所有人的文章
作者公司內部固定寫文章的人發布與管理自己的文章
投稿者外部合作的寫手寫稿並送審,不能自己發布
訂閱者只需要登入看內容的人管理自己的個人資料

分完角色之後還有兩件事。第一,定期盤點使用者清單,離職或合作結束的帳號當天就停用或刪除,不要留著「以後可能還會用到」。第二,不要多人共用同一組帳密,出事的時候才追得出來是誰、從哪裡登入的。

4. 檔案權限、資料庫前綴與關閉後台編輯器

這一節偏主機層面,多半在上線前就該設好。不熟的話直接把下面幾項轉給工程師或主機商,他們看得懂。要做的是三件事。第一,限制哪些檔案可以被改寫,程式才不會被偷偷竄改。第二,把資料庫的表格名稱換掉,避開照預設名稱亂試的自動化攻擊。第三,關掉後台那個能直接改程式碼的編輯器。這樣就算管理員帳號被盜,對方也動不了你的程式。

轉給工程師的五項設定

  • 資料夾權限設 755、檔案設 644。wp-config.php 再收緊到 640 或 600,那支檔案裡有資料庫密碼。
  • 資料庫表格前綴不要用預設的 wp_。改成帶隨機字串的前綴,例如 wp_a7x_。
  • 關閉後台檔案編輯器。在 wp-config.php 加入 define('DISALLOW_FILE_EDIT', true); 這一行。
  • 換掉認證金鑰(SALT)。用官方產生器產一組新值貼回 wp-config.php,舊的登入狀態會全部失效。
  • 限制或關閉 uploads 目錄執行 PHP。萬一有人成功上傳後門檔案,這一條會讓它跑不起來。

5. SSL 與基本安全標頭

HTTPS 現在是基本盤。它不只是為了 SEO 與瀏覽器不跳警告,更是為了避免登入帳密在傳輸途中被看光。用 Let's Encrypt 這類免費憑證就夠,重點是設定自動續期,不要哪天忘了換而讓整站跳警告。

裝好憑證只做了一半。還要把 HTTP 全站轉址到 HTTPS,並且進 WordPress 設定把網址改成 https 開頭,否則會出現一半加密、一半沒加密的頁面。接著加上 HSTS 標頭(Strict-Transport-Security),讓瀏覽器記住這個網站只走加密連線。

再補兩條給瀏覽器的指示:X-Content-Type-Options 與 X-Frame-Options。它們能擋掉「把你的網站藏在別人頁面裡誘導點擊」這類常見手法,成本很低但實際有效。都設完之後,用 SSL Labs 之類的工具檢查一次,確認憑證與協定設定沒有問題。

6. 定期異地備份與還原測試

備份是被駭之後唯一能救你的東西,但「有備份」和「還原得回來」是兩回事。太多人備份檔就放在同一台主機,主機被打掉的時候備份也一起陪葬。也有人從沒實際還原過,真的出事才發現檔案是壞的。

所以備份要同時滿足幾個條件。資料庫與檔案都要備,包含 uploads、佈景與外掛,只備其中一項還原不回完整的網站。存放位置要在異地,另一朵雲或另一台主機都行,總之不要跟網站住在一起。保留的版本要涵蓋好幾個時間點,因為被植入後門常常過一陣子才發現,只留最新一份的話,那一份可能已經髒了。備份週期則看你多常更新內容。

7. 外掛挑選原則與基本防護(WAF 概念)

外掛是 WordPress 最強大也最危險的地方。一支來路不明或年久失修的外掛,就足以拖垮整站或開一個洞。挑外掛不是搜到就裝,要先看幾件事。

裝之前先看這三件事

  • 來源。只從官方外掛庫或原廠官網下載。破解版(nulled)外掛幾乎都被動過手腳,省下的授權費會用別的方式還回去。
  • 最後更新時間。超過一年沒更新的謹慎使用或找替代品,那通常代表作者已經不管它了,出漏洞也不會有人修。
  • 安裝量與評價。優先選維護穩定、作者明確、有支援管道的外掛。冷門外掛不見得不好,但你要有自己承擔風險的心理準備。

裝好之後,防護層面可以再加一道外牆。網站應用防火牆(WAF)可以想成裝在網站前面的濾網,在流量進到 WordPress 之前,先擋掉明顯的惡意連線與自動化掃描,雲端型或外掛型都有。同時把登入防護與惡意流量記錄打開,異常的時候收得到通知,事後也回溯得了。

但要誠實說,沒有任何工具能保證絕對不被駭。WAF 只能降低風險,不能把風險歸零。真正持續有效的還是前面那幾件事:更新、精簡、強密碼、備份。外掛裝越多攻擊面越大,每隔一段時間就該重新問一次「這個真的還需要嗎」。

資安沒有一勞永逸,這份清單也不是打完勾就永遠安全。它把你從自動化攻擊最愛的「軟柿子」名單上移開,剩下的是持續的更新、備份與監控。如果你沒有時間每個月盯這些,把維運交給人做,往往比出事後才找人止血划算得多。

常見問題

WordPress 網站一定要裝資安外掛嗎?沒裝會怎樣?
不是非裝不可,但強烈建議至少有一套涵蓋登入防護與惡意流量偵測的外掛。核心的更新、強密碼、2FA、備份這些基本功其實不靠外掛也能做,資安外掛的價值在於幫你集中管理、及早示警。沒裝不代表一定會被駭,但你少了一層外牆與預警,被自動化攻擊命中的機率會明顯提高。
WordPress 被駭了、首頁被改掉或被植入廣告,第一步該怎麼辦?
先別急著自己亂刪。第一步是保留現場並讓網站暫時下線或維護模式,避免繼續散播惡意內容。接著從乾淨的異地備份還原,並在還原後立刻更新所有核心與外掛、更換全部密碼與資料庫金鑰。如果找不到入侵點,很容易還原後又被打回來,這時建議找專業做入侵止血與根因排查,確認後門真的清乾淨。
改了 wp-login 登入路徑、限制登入次數,就不會被暴力破解了嗎?
會大幅減少,但不能說絕對。隱藏登入頁與限制次數能擋掉絕大多數只認 wp-login.php 的自動化機器人,對降低雜訊很有效。不過真正決定成敗的還是密碼強度與 2FA。路徑只是讓對方找不到門,強密碼加兩步驟驗證才是就算找到門也打不開。兩者一起做效果最好。

延伸閱讀