WordPress安裝後你應該做的事–安全防駭篇

在上一篇「提高WordPress安全性的10步驟安裝教學」中,我們將安裝時可以防堵的漏洞補起來,但駭客還有許許多多的方式可以入侵你的網站。網站上的檔案、文章內容,都是我們的心血,是珍貴的資產,一點一滴累積起來的東西,堪比拉拔一個孩子長大,要是被傷害了,是會心痛的,更不要說復原網站時會有多傷腦筋了。所以,我們要多做些事情來強化網站整體安全,降低網站被亂搞的可能性。

提高安全性就是要防止有人惡意侵入,所以防護措施當然就是針對侵入手法來防堵,先來了解侵入的方式有哪些:

  • WordPress 版本資訊:可以被黑客利用,攻擊特定版本或舊版、低安全性版本的WordPress漏洞
  • 透過網頁瀏覽你的檔案目錄:目錄下缺少預設的 index.php 或 index.html 時,在網址列輸入http://你的網址/目錄名稱,就能瀏覽你的檔案目錄,甚至偷取。
  • 存取檔案:例如wp-config.php,裡面有資料庫的資訊,被看到就大事不妙
  • 改寫檔案:放入廣告程式或垃圾郵件程式,或是掛了你的網站
  • 垃圾留言攻擊:在留言放上惡意連結或大量灌爆你的網站
  • 直接取用你的圖片鏈結:使你的網站變慢,流量增加
  • 暴力密碼攻擊:在後台登入頁面猜帳號、密碼
  • 傳輸大檔案來衝爆你的流量

了解漏洞之後,我們就要一項一項的防堵起來

移除WordPress 版本資訊

從你的 WordPress 原始碼完整移除掉版本號和其他非必要的 meta-data。將以下程式碼加入佈景主題的 functions.php 檔案

第一行是移除WordPress版本資訊 第二行是Windows Live Writer 用於下載你 WordPress 部落格的樣式、佈景主題。若不使用即時預覽功能,可以移除。 第三行中RSD是一個廣義的接口。如果你不使用離線編輯器,就移除。即便你需要使用離線編輯器,大部分時候也不需要這行代碼,而且可能會留有安全隱患。   另外一個會顯示WordPress版本資訊的地方是readme.html,這個檔案在上一篇「WordPress高安全性10步驟安裝教學」中已經移除。

防止透過網頁瀏覽你的檔案目錄

第一個作法

確保你每個目錄下都有預設的 index.php 或 index.html 。 當然,我不會想用這個作法,因為那表示我要創建一堆的index檔案,還要每個目錄都去檢查。所以用程式碼來解決是比較方便又省事的。

第二個作法

將以下程式碼放在網站根目錄下的 .htaccess檔案中, 若你沒有這個檔案,先到網站後台設定固定連結/%category%/%postname%/,就會自動創建一個,創建好後,若你的FTP上看不到,請勾選「強制顯示隱藏檔案」,就會看到了。 通用寫法有兩種: 第一種寫法:注意!Options All在某些虛擬主機中是不允許被覆寫的,說是基於安全理由。如果你要用這種寫法,可能需要測試一下你的虛擬主機商是否允許。

第二種寫法:只用Options,似乎就比較沒有問題。

防止存取或改寫檔案

第一步:調整目錄和檔案的權限

WordPress官方建議:目錄一律設為755,檔案一律設為644。(若使用虛擬主機就不需要自己設定,已經自動設定好)

第二步:重點保護部分目錄和檔案,防止存取。

保護wp-Config.php

將以下程式碼放在網站根目錄下的 .htaccess檔案中。這語法意思是:禁止所有人瀏覽(主機內的程式可以正常讀取)

保護 wp-content目錄

獨立創建一個.htaccess檔案,將以下程式碼放進去,上傳到 wp-content 目錄,例如 www.yourwebsite.com/wp-content/。這麼做只會允許 XML、CSS、JPG、JPEG、PNG、GIF 和 JavaScript 被上傳到媒體資料夾,其餘的檔案類型將被拒絕。如此,駭客就無法將郵件程式上傳到你的網站,利用你的伺服器來發送垃圾郵件。

注意:如果裝「Featured Post with thumbnail」、「Yet Another Related Posts Plugin」又做這項修改,前者圖片會無法讀取,後者樣式會跑掉

另外兩種作法是搬移wp-content目錄或重新命名wp-content目錄。 因為外掛開發者有可能把wp-content目錄的路徑寫死,搬移或重新命名會造成外掛無法使用,所以我不太想用這兩種方法。

保護wp-includes目錄

將以下程式碼放在網站根目錄下的 .htaccess檔案中。

保護 .htaccess

將以下程式碼放在網站根目錄下的 .htaccess檔案中。語法是禁止所有人直接瀏覽該檔案,但是系統使用讀取是允許的。

防止垃圾留言攻擊

網路上參考資料中有兩種防護方式

  • 第一種是啟用WordPress內建Akismet外掛+以程式碼關閉迴響的網址、html功能等等。
  • 第二種是裝DISQUS留言系統取代內建迴響機制。

我選用第二種,因為DISQUS留言系統有強大的過濾垃圾留言功能,又能讓讀者以各種社群帳號登入留言,最棒的是能通知讀者有回覆的留言。如果使用第一種方式,不但比較麻煩,而且我還要為後兩項需求傷腦筋。

防止直接取用你的圖片鏈結

直接連結的意思是某人直接取用你的圖片鏈結,然後將它分享到其他網頁上。這可能使你的網站變慢,流量暴增,若你使用流量有上限的虛擬主機,那就要為此多付錢了。 你可以禁止除了你的網站以外的網站直接連結圖片。 當其他人試圖從其他網址瀏覽你的圖片時,他們將會看到禁止圖片,而這圖片可以變更為任何你想要的圖(在上面的最後一行設定圖片路徑)。雖然這作法一樣會從你主機讀取圖片,但是當發現無法真正連結你的圖片後,應該就會停止這種盜取行為。

注意:禁止直接連結可能導致一些 RSS 閱讀器無法顯示你 RSS Feed 裡的圖片。所以如果要開放RSS就不要使用這一項。

將以下程式碼加入網站根目錄下的 .htaccess檔案中。請確認將以下yourwebsite.com更改為你的網址。

保護Admin控制台和登入頁面

第一步:更改管理員的暱稱

管理員的帳號是不能被別人知道的,會增加被駭風險。修改位置:帳號→個人資訊→如何顯示你的大名,修改暱稱,換掉顯示大名。

第二步:隱藏 WordPress 登入畫面的錯誤訊息

當你輸入一個不存在的使用者名稱,或是錯誤密碼來登入 WordPress 時,它會顯示相當詳細的錯誤訊息,來告訴你使用者名稱錯誤,或是密碼錯誤,等於是提供線索讓人家猜。

將以下程式碼加入佈景主題的 functions.php 檔案,會把原本的錯誤資訊換成「滾開!! RIGHT NOW !!」,這一段文字你可以自己換上你想說的。

第三步:保護wp-admin和wp-login.php

第一種方式:以密碼保護你的 wp-admin 目錄

但是手續繁雜,並且儲存這一組帳號密碼的地方是在網站目錄外,萬一網站要轉換主機或位置的時候,有點麻煩。

第二種方式:將wp-admin和wp-login.php都限定進入的IP

但是….這個方法限制很多, ※需要有固定IP

  • 多人管理或多人共寫的網站要寫入很多IP,而且每個人都要有固定IP
  • 在公司、在家裡、出差在外都要進後台的時候就有困難
  • 用電腦、用平板、用筆電、用手機,不同裝置,等於有接線的、用WIFI的,都要弄成固定IP

所以這種方式,可以搞,但是難度高。

第三種方式:隱藏 WordPress 後台

原理就是把wp-admin和wp-login.php的門牌號碼給換了,跟換固定網址的意思一樣,檔案、目錄都在原本的位置,只是顯示的網址不一樣了。在尚未登入後台的情況下輸入一般的 /wp-admin 或是 wp-login.php 後台網址,會被轉成前台首頁。這樣子,可以減少讓人家來猜帳號、密碼的機會,因為根本找不到登入的地方。 在使用這個方法前,如果你有使用快取外掛,請你先在你的快取外掛將這個新的後台網址加入不快取的名單,記得前面要加 / 。例如/myadmin。 接著,安裝「Lockdown WP Admin」外掛,安裝外掛之前先設定固定連結,以便自動產生.htaccess檔案,若是沒有.htaccess檔案就安裝啟用並設定,會發生進不了後台的悲劇。如果你在上面的步驟已經有使用.htaccess檔案,可以直接進行這一步驟。 設定好之後,登出。用瀏覽器的無痕模式以一般的 /wp-admin 或是 wp-login.php 後台網址看看,會出現404找不到網頁

第四種方式:使用你的 Email 作為登入帳號

這種方式,我個人覺得,若是你在網站上留下你的Email帳號作為聯絡方式,那豈不是等於直接告訴人家…你的帳號。

第五種方式:使用限制登入次數的外掛來防止暴力密碼攻擊

「Limit Login Attempts」算是這一類外掛中,非常乾淨簡單好用的。超過你設定限制的登入次數,那個IP就會被鎖定,無法再嘗試登入,你也可以設定要不要收到通知。

第六種方式:啟用二階段驗證功能

「Google Authenticator」這出色的外掛能為你的WordPress加入兩步驟驗證功能。除了輸入正確的密碼外,還必須搭配手機應用程式來輸入隨機產生的驗證碼。如果有人取得了你 WordPress 帳號密碼,他們仍需要你的手機才能夠登入 WordPress 控制台。而且手機上的驗證碼,每60秒左右就會換一組,錯過就不能登入。

第七種方式:單一登入

(2016.08.18新增)

這是將登入頁面直接轉由WordPress.com負責,在WordPress.com登入後會轉回自己的網站後台。這種方式的好處是,登入頁面根本不在你家,不管駭客嘗試登入多少次,對你的主機都不會造成負擔。而在WordPress.com登入,也是屬於二階段驗證的方式,相當安全。使用「單一登入」,等於使用了上面第三+第六種方式。這也是我目前使用的方式。詳細教學請參考:啟用 Jetpack「單一登入」機制教學,讓你的 WordPress 網站更安全(含兩步驟驗證)

限制上傳大小

避免駭客透過Dos攻擊,利用傳輸大檔案來衝爆你的流量,所以可以透過限制單檔大小來阻絕這樣的一個狀況發生,將以下語法加入到根目錄的.htaccess檔案即可,預設是10MB設定

其他重要防護

停用 WordPress 內的檔案編輯功能

當你以系統管理員權限登入你的 WordPress 控制台,你可以輕鬆地編輯任何 WordPress 外掛及佈景主題。但畢竟直接暴露在後台可以編輯是一件很危險的事情,除了可能因為駭客入侵亂改,也可能自己改錯造成網站出錯。請將以下語法加入wp-config.php,就可以關閉修改的權限了。

監測網站檔案

在上面已經做了這麼多修改和防護之後,我們仍然要時時注意是不是還有漏洞讓人改了我們的檔案,要對別人正在對我們的網站做什麼,有點警覺。

由於網站最佳化原則是不肥大的資料庫、不肥大的檔案,以免拖垮效能。 所以我傾向不使用以下特點的安全防護外掛

  • 功能複雜(很多功能用不到,而且很多功能和我上面已經做的部分重複)
  • 檔案肥大
  • 製造太多資料表和資料內容,使資料庫肥大

為了避免以上缺點,我選擇了兩款能滿足監測需求又功能單純的外掛:

  • Error Log Monitor:它能定期透過 Email 發送錯誤日誌到你的信箱,也能顯示於你的 WordPress 控制台。從錯誤記錄有時候可以發現針對你 WordPress 所發出的無效資料庫查詢或檔案查詢
  • WordPress Sentinel:可以監控你的 WordPress 檔案,當有任何檔案被加入、刪除或修改時會發出警告。有警告時,查看是哪隻檔案被有問題,找出來和備份檔案裡的比對一下,就可以找出問題,也可以把正常的備份檔案覆蓋回去

備份你的網站檔案和資料庫

這一個項目用紅標,可見它有多重要。在網路上看過一位部落客形容備份工作是「天殺的太重要了!」,看到他這一句話,我笑開了,心有戚戚焉阿!

我選擇「BackWPup」外掛,每日自動備份資料庫資料檔案,它可以備份到其他主機,或同步至網路硬碟。有的站長建議排除wp-admin和wp-includes兩個目錄,我比較懶,通通打包,需要用的時候,直接解壓縮上傳就好。

啟用CLOUDFLARE

在安全防護的功能上來說,所有的流量、訪客都必須先經過CLOUDFLARE的過濾,它會為你的網站擋下惡意訪客,防止網站被惡意攻擊。其他的好處留待「最佳化篇」再來說。


安全防護到此結束,現在你的網站已經不容易被破壞了,但是,這沒有保證,因為只防了一般性手法,無法排除有駭客高手的可能,好消息是,高手通常對名氣很大的網站才會願意花心思去破解,你可以等到你的網站名氣很大之後再來傷腦筋,不過,我想那時你的流量應該已經迫使你換到獨立主機了,獨立主機通常有更強化的防護,花錢買安心囉!

做好安全防護後,我們還要接著進一步將網站最佳化。

系列文章

  1. 如何為你的網站取一個響亮的好網址/網域?
  2. 擁有自訂網域信箱/企業信箱,你可以有哪些選擇?
  3. 提高WordPress安全性的10步驟安裝教學
  4. WordPress安裝後你應該做的事–安全防駭篇
  5. WordPress安裝後你應該做的事–網站最佳化篇

若是想訂閱追蹤本站最新文章,歡迎加入「Facebook」、「Google+」、「Twitter」,或是透過Email訂閱更新
《芳喵隨筆》新文章不漏接,簡單設定Facebook新功能


以下是本文中使用到的參考資料

安裝WordPress後你應該做的25件事

安裝完WORDPRESS之後必做的22件事

安裝WordPress後必做的30件事

強化WordPress網站安全的 12 個方法

11 個強化 WordPress 網站安全的 .Htaccess 設定技巧

9 個提升 WordPress 網站安全性的方法

8 個實用的 WordPress 程式碼(Code Snippets)

幫WordPress後台築城牆

WordPress 後台登入網址隱藏、避免暴力破解安全防護外掛

Bluehost的.htaccess Tutorial

Hardening WordPress

初衷只是紀錄與分享,默默地寫著,突然發現,寫作、分享、解惑,仍然是我最熱愛的事,曾經放棄了這些,竟由生病帶領我回到這條路上,塞翁失馬焉知非福。