網站半夜被黑?別怕! WordPress 安全指南,從預防到災難復原全攻略
☰ 目錄 table-of-contents.md
網站半夜被黑?這是你最該先做的事
如果你的 WordPress 網站被植入賭博內容、首頁變空白,或被 Google 標示為危險網站,最快的復原方式幾乎都是同一個:從一份乾淨的備份還原,再逐一更換所有密碼與金鑰。而要讓「被黑」這件事不再發生,關鍵也只有三件:保持核心與外掛更新、強化登入(強密碼+兩階段驗證+限制嘗試次數)、以及部署一道防火牆與自動備份。
這篇文章會把上述每一點拆解成可以照做的步驟,從「為什麼會被攻擊」到「實際的設定指令」,再到「真的被黑了的災難復原 SOP」。看完你就能把網站從一個門戶大開的靶子,變成一座難以攻破的數位城堡。
身為一個天天跟程式碼和伺服器打交道的工程師,最怕的不是半夜被 call 起來修 bug,而是睡眼惺忪地打開手機,看到客戶傳來訊息:「我的網站變成賭博網站了!」這絕對是所有網站管理員的終極惡夢。好消息是,這場惡夢九成以上都能事先避免。
為什麼 WordPress 特別容易成為攻擊目標?
知己知彼,百戰百勝。在動手強化網站之前,得先搞懂為什麼 WordPress 這麼受駭客「青睞」。很多人有個迷思:「我的網站只是個小小的形象網站,流量也不大,駭客才不會對我感興趣。」這想法其實很危險——因為絕大多數攻擊根本不是「人」針對你發動的,而是自動化腳本在整個網路上無差別地掃描有漏洞的網站,你的網站大小不是重點,有沒有洞才是。
- 市佔率太高:根據 W3Techs 的數據,超過 40% 的網站都使用 WordPress。這意味著只要找到一個普遍性的漏洞,駭客就能攻擊數以百萬計的網站,投資報酬率極高。
- 龐大的外掛與佈景主題生態系:WordPress 的迷人之處在於有成千上萬的外掛與佈景主題可以擴充功能,但這也是一把雙面刃。每個外掛都可能是一個潛在的破口,特別是那些久未更新、或由不知名開發者撰寫的程式碼。
- 使用者的資安意識不足:很多人習慣用「admin」當帳號、「123456」當密碼,或從來不更新核心、外掛與佈景主題。這些壞習慣無異於大開城門,歡迎駭客光臨。
這幾個問題聽起來可怕,但每一項都有明確的對策。接下來我們逐一擊破。
駭客最常用的攻擊手法有哪些?
想防禦,就要先知道敵人會從哪裡進來。以下是幾種最常見、身為網站管理員不能不知道的 WordPress 攻擊手法。
暴力破解攻擊(Brute Force)
這是最簡單粗暴、也最常見的攻擊。駭客用自動化程式,不斷嘗試各種帳號密碼組合來登入你的 wp-admin 後台。一旦成功,網站就等於拱手讓人。它的天敵很單純:無法被猜中的帳號密碼,再加上失敗幾次就鎖住的機制。這也是為什麼千萬別用預設的「admin」帳號。
SQL 注入(SQL Injection)
聽起來很技術,但概念很單純。如果網站有讓使用者輸入資料的地方(例如搜尋框、聯絡表單),而程式碼沒做好過濾,駭客就能輸入惡意的 SQL 語法,直接存取、修改甚至刪除你的資料庫。這是毀滅性的打擊。防禦核心在於「參數化查詢」——讓使用者輸入的內容永遠被當成「資料」處理,而不是「指令」。在 WordPress 開發中,這對應的就是用 $wpdb->prepare() 來組裝任何含有變數的查詢。
跨站腳本攻擊(XSS)
XSS 是把惡意的 JavaScript 注入你的網頁。當其他使用者瀏覽該頁面時,腳本就在他們的瀏覽器上執行,藉此竊取登入資訊(Cookies)或其他敏感資料。防禦的原則是:輸入要過濾、輸出要轉義——所有要顯示到頁面上的內容,都應該先做適當的編碼,讓瀏覽器把它當文字而非程式碼。
過期軟體的已知漏洞
這絕對是最多網站被黑的原因,沒有之一。WordPress 核心團隊和優質外掛開發者會不斷釋出更新,其中很多是為了修補「已經公開」的安全漏洞。漏洞一旦公開,自動化掃描程式就會立刻拿來掃全網。如果你因為怕更新弄壞網站而遲遲不動作,你的網站就像身上貼滿「請攻擊我」標籤的靶子。
WordPress 終極安全防護 Checklist(照做就對了)
理論講完,接下來是實作。跟著下面的層次一步步操作,把網站打造成難以攻破的數位城堡。建議由上而下逐層補強:每一層都擋掉一類攻擊。
第一層:強化核心與登入安全
- 更新!更新!再更新!:WordPress 核心、外掛、佈景主題,只要有更新通知,請務必在測試環境確認沒問題後就立刻更新。這是 CP 值最高的一步。
- 拋棄預設值:絕對不要用「admin」當管理員帳號。如果已經用了,請新增一個全新的管理員帳號(用不同的使用者名稱),用它登入後再刪除舊的「admin」,並把舊帳號的文章歸給新帳號。
- 強密碼+雙重驗證(2FA):使用包含大小寫字母、數字、符號的長密碼。更重要的是啟用 2FA——登入時除了密碼,還需要手機上動態產生的驗證碼。即使密碼外洩,駭客手上沒有那組每 30 秒變動一次的驗證碼,依然進不來。你可以使用像 Wordfence Login Security 或 Google Authenticator 這類工具。
- 限制登入嘗試次數:裝個 Limit Login Attempts Reloaded 之類的外掛,設定登入失敗幾次後就暫時封鎖該 IP,直接讓暴力破解失去意義。
第二層:加固你的 wp-config.php
wp-config.php 是 WordPress 最重要的設定檔,裡面有資料庫連線資訊,保護好它至關重要。
第一件事,是在 wp-config.php 中加入以下這行,禁用後台的佈景主題與外掛編輯器。這樣就算駭客真的登入了後台,也無法直接透過內建編輯器把惡意程式碼貼進你的佈景主題檔案——這是常見的提權手法之一。
define('DISALLOW_FILE_EDIT', true);
第二件事,務必確認你的 WordPress 安全金鑰(Authentication Keys and Salts)已經設定為一組隨機且夠長的字串。這些金鑰會用來加密你的登入 cookie,讓駭客更難偽造或破解登入狀態。一個值得記住的特性是:更換這些金鑰會讓所有人的登入狀態立刻失效,因此一旦懷疑網站被入侵,重新產生一組新金鑰是踢出所有可疑工作階段最快的方法之一。
第三層:檔案與伺服器權限
這是很多新手會忽略、但工程師非常在意的部分。不正確的檔案權限會讓駭客有機可乘,輕易上傳並執行惡意檔案。WordPress 官方建議的權限基準如下:
| 對象 | 權限 | 說明 |
|---|---|---|
| 目錄 | 755 | 擁有者可讀寫執行,其他人僅可讀取與進入 |
| 一般檔案 | 644 | 擁有者可讀寫,其他人僅可讀取 |
wp-config.php | 600 | 更嚴格,只允許擁有者讀寫 |
原則上,絕對不要把任何檔案或目錄設成 777(任何人都能寫入與執行)。如果你能用指令操作主機,要批次套用上述基準可以這樣做:
find /path/to/wordpress -type d -exec chmod 755 {} \;
find /path/to/wordpress -type f -exec chmod 644 {} \;
另外,你可以在 .htaccess 中加入以下程式碼,保護重要檔案並關閉目錄瀏覽,避免網站結構外洩(此設定適用於 Apache 環境):
# 保護 wp-config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
# 關閉目錄瀏覽
Options -Indexes
第四層:部署 Web 應用程式防火牆(WAF)
WAF 就像網站的保全,它會在惡意流量到達你的網站之前先攔截。常見的選擇可以分成兩種層級,各有取捨:
- 外掛型 WAF(如 Wordfence、Sucuri Security):運作在 WordPress 之內,安裝簡單、規則貼近 WordPress 的常見漏洞,缺點是惡意請求已經進到你的伺服器才被擋下,無法替你卸載大流量攻擊。
- DNS / 雲端層級 WAF(如 Cloudflare):運作在流量還沒到你主機之前,在邊緣就先過濾,能擋掉更大量的自動化攻擊與部分 DDoS,缺點是設定稍微複雜,規則太嚴格時偶爾會誤殺正常使用者或搜尋引擎爬蟲。
實務上兩者可以並用:用雲端層級擋掉大宗的雜訊流量,再用外掛型補足 WordPress 專屬的細部規則。要注意的是 WAF 不是裝了就一勞永逸,規則需要依實際情況微調,避免把正常訪客或 Google 爬蟲一起擋掉。
終極保險:定期備份(且要異地存放)
如果說以上所有措施都是「預防」,那備份就是你最後、也最重要的「保險」。不管防護做得多好,都不能 100% 保證絕對安全。一旦最壞的情況發生,一份乾淨的備份能讓你在最短時間內復原,把損失降到最低。
備份有兩個重點不能省:
- 自動且定期:設定自動備份(例如每天一次),別仰賴手動,因為人總會忘記。
- 異地存放:把備份存到網站主機以外的地方(例如 Google Drive、Dropbox)。如果備份跟網站放在同一台主機,主機一旦被攻陷或損毀,備份也跟著陪葬,等於沒備份。
UpdraftPlus 是一個我個人很推薦、能同時滿足這兩點的免費備份外掛。另外提醒:備份要定期試還原一次,沒驗證過能還原的備份,只是讓你「自我感覺良好」而已。
網站真的被黑了怎麼辦?災難復原 SOP
如果不幸網站還是遭殃了,請先深呼吸、不要慌張。重點是「先止血、再清理、最後補洞」,按照以下步驟處理:
- 保持冷靜,立即隔離:馬上啟用維護模式,或暫時把網站下線,避免災情擴大、也避免惡意內容繼續傷害訪客或影響你在 Google 的信譽。
- 聯絡你的主機商:有些主機商提供惡意軟體掃描或災難復原服務,他們也能從伺服器端協助你判斷感染範圍。
- 全面掃描與分析:使用像 Wordfence Scan 或 Sucuri SiteCheck 這類工具找出被感染的檔案,並比對哪些檔案被竄改、何時被竄改,盡量還原「駭客是從哪個破口進來的」。
- 進行清理與還原:最快也最安全的方法,就是直接從你最近一份「乾淨」的備份還原。如果沒有備份(你看,我說了吧),就得手動清理:重新下載安裝對應版本的 WordPress 核心檔案、檢查
wp-content目錄下是否有可疑檔案、並檢查資料庫裡是否被偷偷新增了奇怪的管理員帳號。 - 事後強化:網站恢復後,立刻更改所有密碼(WordPress 後台、資料庫、FTP、主機後台),重新產生一組 wp-config.php 的安全金鑰把所有舊登入狀態踢掉,再回頭檢視整套安全策略,把當初被鑽的那個洞補起來——否則清乾淨了還是會再被同一招打回原形。
結論:安全是一場永不停止的旅程
身為工程師,我想強調的是:網站安全不是一個「設定完就忘記」的功能,而是一個持續不斷的過程。你需要保持警覺,定期檢查、更新和備份。回到開頭——預防靠的是更新、強化登入、防火牆與備份這四件事;復原靠的是一份乾淨、異地、驗證過的備份。把這兩條主線顧好,半夜被 call 的機率就會大幅下降。
當然,如果你覺得這些技術細節太繁瑣,或需要更專業的協助來審視、強化網站安全性,甚至是從被駭的災難中復原,浪花科技的團隊隨時都在。我們處理過各種疑難雜症,很樂意為你提供專業的諮詢與服務。
立即聯繫浪花科技,讓我們成為你網站最堅實的後盾!
延伸閱讀
常見問題
WordPress 網站被植入賭博內容或被駭,最快的復原方式是什麼?
為什麼流量很小的 WordPress 網站也會被攻擊?
強化 WordPress 登入安全有哪些必做的設定?
wp-config.php 應該加上哪些設定來提升安全性?
WordPress 檔案與目錄權限應該怎麼設定?
網站備份要注意什麼才真的有用?
訂閱免費電子報
把 AI 自動化、企業系統設計與 WordPress / Laravel 開發的真實案例和可直接照做的技巧,整理成電子報寄給你。只寄精選內容、不灌垃圾信,一鍵就能退訂。