WordPress是非常熱門的CMS系統(內容管理系統,白話文:架站系統)、市佔率超過四成(參考資料),因為樹大招風的關係…就產生很多「都市傳說」,其中一個就是WordPress不安全(OS:那自己開發的系統就比較安全?)、很容易被駭。WordPress不安全嗎?看使用者,如果不做任何安全性防範、使用超爛的帳密也不好好管理、程式老舊都不更新、使用對資安嗤之以鼻的主機,那沒錯…WordPress不安全,但這種使用習慣用啥系統都不安全吧!
這篇文章分享的是我如何提升WordPress的安全性,全文技術含量不高,因為我不是工程師、無法解釋太多程式面的東西,但這些方式都很容易實現,有的只是關乎使用習慣、跟程式面無關,有的是主機端防護、慎選主機就可處理。文章目錄:
改善登入安全性:
兩階段驗證:
兩階段驗證(2 factor authentication,2FA)即是輸入正確的帳號密碼後還要再輸入正確的驗證碼才能登入,除了佈署在WordPress後台,如果主機、網域註冊服務有提供這個功能,也建議開啟。WordPress的安全性外掛大多有提供這服務,只是差在免費或付費(Wordfence、Shield Security都免費提供)。
開啟兩階段驗證後要記得下載備用碼,以免無法取得驗證碼時無法登入後台,通常…系統也會問是否要在瀏覽器保留網站的兩階段驗證資訊,這樣就不用每次想進入後台都要通過先兩階段驗證。
防止暴力破解:
這邊指的暴力破解(Brute-force attack)是以程式產生帳號與密碼、不斷嘗試登入WordPress後台,應對的方式通常是封鎖產生過多登入失敗的帳號或IP(例如在10分鐘內產生連續五次失敗登入),大多數的WordPress安全性外掛都有提供這功能,算是很基本的資安防護。
串接WordPress.com的登入機制:
除了使用WordPress.org內建的登入機制,也可以利用Jetpack串接WordPress.com的登入機制(相關文章)、利用它的系統去偵測、阻擋惡意登入,當然也要開啟 WordPress.com的兩階段驗證,我便是用這方式來強化登入的安全性。
封鎖可疑登入帳號:
這個意思很簡單,就是如果有人用可疑的帳號名稱嘗試登入就即刻封鎖該帳號或IP,最常見的例子就是【admin】,另一個需要注意的是品牌名、網域名(以本站來說:wpandseo),什麼人會嘗試用這種帳號登入呢?當然就是居心不良的人,在入侵後台時由最容易猜測的帳號開始嘗試。
強化帳號與密碼:
- 不要使用容易猜測的帳號跟密碼,例如admin、網域名
- 要使用高強度密碼:含英文大小寫、數字、符號,長度要夠(例:超過12個字元)
- 使用外掛提升密碼強度,即強制密碼要達到一定強度、一定要使用英文大小寫、數字、符號
- 如果有提供登入資訊給開發者debug,請創建一組新的,結束之後一定要變更密碼與權限(最好刪除,但之後有需要就要再建一次,我懶惰…)
變更登入網址:
WordPress預設的登入網址是【/wp-admin】,也就是架好站之後沒有做任何調整,很容易被找到後台登入路徑,這時候就可以外掛更改登入路徑,修改完成後再連到 【/wp-admin】 就會顯示網址不存在。
可以達成這個功能的有部分安全性外掛(如:Shield Security)或WPS Hide Login。使用這功能時要很小心,一定要在另一個瀏覽器測試、不要由常用瀏覽器登出,出問題才能馬上在後台調整,而且…忘記新的登入網址就只能停用外掛或由資料庫更改。
隱藏登入錯誤訊息:
這是個很重要的小調整,意即使用者輸入錯誤的登入資訊時不跟他說哪個資訊錯誤,如果提示帳號錯誤那就是密碼正錯,反之亦然,這樣會降低猜測的難度。有很多外掛都可以達成這功能(例:Wordfence、Shield Security、iTheme Security),有的是一板一眼的說輸入的帳號或密碼錯誤(不說哪個錯),有的則是可以自訂訊息(例:滾出我的草坪)。
採用Google登入:
除了使用內建的登入方式,WordPress也有不少外掛可以讓我們串接Google的登入,設定得當也可大幅提升登入的安全性。第一點就是要開啟Google登入的兩階段驗證,第二點則是強制使用Google的登入機制、讓使用者沒機會使用內建登入機制,這又分成兩點:
- 使用者連到預設登入網址時要將他強制轉到Google登入頁面
- 要將登出頁面轉址到首頁或關於我,不然連到登入頁面還是可使用內建登入機制
我過往都是使用Jetpack來串接WordPress.com的登入機制,目前已經改成Google登入,搭配兩階段驗證與上述兩個調整,強化登入的安全性。
小結:
優化WordPress登入安全性的方式有很多,但也別矯枉過正,我建議一定要隱藏登入錯誤訊息、使用高強度且難猜測的帳號與密碼、防止暴力破解,但是變更後台登入網址、使用兩階段驗證、使用WordPress.com或Google的登入機制只要三者則一就可,因為…同時佈署的話很可能產生問題。
總之,在調整WordPress登入機制時一定要非常謹慎的測試,且出錯時要可以隨時停用相關外掛,以免把自己鎖在門外、只能由FTP進到WordPress目錄去停用外掛。
系統微調:
- 隱藏WordPress版本:有的惡意程式會攻擊特定版本WordPress的漏洞,WordPress版本對使用來來說沒有意義,可以使用外掛(如:Clearfy、Asset CleanUp)隱藏、不讓惡意程式探知版本!寫在原始碼的WordPress版本資訊:<meta name=”generator” content=”WordPress 5.8″ />
- 禁止在WordPress的【uploads】資料夾上傳 php檔案:這資料夾本來就只是放媒體檔案,在這邊存放php檔案是很有問題的
- 限制網頁的存取數、檔案的請求數:這是指限制特定時間內(例:1分鐘)時特定使用者或IP存取的網頁數或檔案請求數,過多很可能是可疑行為,何謂過多?可以使用外掛預設值
- 停用目錄瀏覽(directory indexing and browsing):
- 請Google “directory indexing and browsing”,看圖片內容就知道這是什麼
- 安全性外掛都可以停用這個功能,Cloudways的主機後台也可停用這個功能
- 建議停用,以免所有網站資料被看光光,很容易被探知存在哪些安全性漏洞可以利用
維持系統更新:
WordPress:
WordPress的主程式、佈景主題、外掛皆頻繁更新,難免會產生相容性問題,實務上也不建議立馬更新為最新版本,但是…該更新的還是要更新,尤其是跟安全性修補有關的更新,相容性問題不是理由。Wordfence跟iTheme Security的官網都會提供程式漏洞報告,建議訂閱,才能及時修補安全性漏洞。
在挑選外掛或佈景主題時也要注意開發者的更新頻率,切勿使用近期都沒更新、支援的WordPress版本停留在老舊版本(例:4.X之類的)的程式,這很可能代表開發者已經不維護,當然也不會修正安全性問題了。
PHP版本:
WordPress是以PHP為核心打造的內容管理系統,官方有建議的PHP版本。根據PHP的路線圖(Road map),目前針對7.4或更高的版本提供一般性維護與安全性維護,7.3的安全性維護只到2021 / 12 / 6,之後這版本就被徹底放生了,意即該版本有安全性問題也不會修復它。
PHP版本應該使用WordPress官方建議的版本、確保程式可以正常、安全的運作,這點無法妥協。主流的WordPress主機服務至少會支援7.4,如網站是請人開發,建議在合約規範PHP版本,避免過舊版本衍生的安全性問題。
檢查WordPress PHP版本的方式很簡單,由主側邊欄【工具】-【網站狀態】進到網站狀態頁面,如果PHP版本過舊就會顯示警告;切換到頁籤【網站狀態資訊】後,在區塊【伺服器】就能看到PHP版本。
慎選程式來源:
WordPress出現安全性問題的主因之一就是用了可疑的程式(佈景主題或外掛),這一點其實很容易避免,只用通過WordPress官方審核過的免費外掛或佈景主題。如果是使用付費佈景主題或外掛,請由開發者的官網或者正規的軟體市集(例Theme Forest)購買。
通常會建議由WordPress主選單的【外掛】或【布景主題】來安裝程式,如果一定要用上傳壓縮檔的方式,請先由 【外掛】或【布景主題】 找到官方連結再下載,不要隨意Google、由來源不明的網頁下載。
最後一點…不要貪小便宜、由可疑的地方購買價格偏低的付費佈景主題或外掛(例如USD 20的WP Rocket或JNews),這種通常有詐,中標得自己想辦法,開發者不會理你。
定期備份:
這不用再解釋了…主機要可以提供每日備份、留存天數至少兩週,不可妥協!然後,要確認主機的備份檔可以正確還原,不然就好笑了!
除了主機的備份,建議採用UpdraftPlus或BlogVault產生備份檔、存到自己的雲端空間。這用意是避免主機發生問題(例:OVH大火)或者跟主機商產生爭議,讓備份 / 還原機制無法運作,不是要取代主機正常運作的備份 / 還原功能。
定期掃描:
定期掃描也是提升WordPress安全性的重要手段,有的外掛(例: Wordfence、Shield Security )免費版即提供這服務,有的則是要付費,而部分主機服務(例:SiteGround)也提供付費服務。就像防毒軟體一樣,掃描的範圍可淺可深,最基本的就是去偵測網站使用的主程式、外掛、佈景主題是否存在已知的資安漏洞,有的話就發信通知,當然也會有服務提供更深層的惡意程式掃描,但我沒用過。
安裝WordPress資安外掛:
看到這邊應該會發現一件事:很多功能都需要依靠WordPress資安外掛來達成,WordPress主程式並沒有提供這麼多安全性防護,所以說…WordPress安全性不佳也不能說百分之百錯誤,畢竟需要用安全性外掛補充主程式的不足。以下整理本文提到的相關外掛:
- 資安:Wordfence、Shield Security、 iTheme Security、 All In One WP Security & Firewall
- 變更後台登入網址: Shield Security、WPS Hide Login、Clearfy
- 移除原始碼不必要的資訊: Clearfy、Asset CleanUp
- 備份: UpdraftPlus、BlogVault
有選擇障礙對吧!建議這個組合:Wordfence+Clearfy+UpdraftPlus!
設定前一定要備份,然後要確保不要開啟重複的功能,不然網站很容易掛掉!
主機端安全性強化:
主機端的安全性強化對WordPress資安至關重要,最基本的就是要提供每日備份、兩階段登入驗證、SSL憑證、可疑爬蟲偵測等等,在採用主機時一定要確認主機商採用哪些方式強化安全性,不然就是…挑知名主機,Cloudways (安全性說明) 、Kinsta(安全性說明)、WP Engine、SiteGround等等都是不錯的選擇。
主機通常會提供FTP功能,一定要謹慎管理帳號,用不到的FTP帳號建議刪除,Cloudways很不錯的一點是可以設定白名單,僅限特定IP可以使用FTP連線。
心得:
雖然WordPress的安全性不能說是天衣無縫,但也沒到不堪一擊,以這篇的建議來強化WordPress的安全性就能達到基本的防護,再說,系統發生資安問題經常是人為過錯,例如用太弱的密碼、貪小便宜用來路不明的程式,這些都是可避免的。