本文參考資料為 How to Improve the Security of your WordPress Blog, 已取得原作者 Amit Agarwal 授權。
大約一個月前,這個部落格被黑客入侵(編按:Amit Agarwal 的網站)。而其他托管於相同主機商的網站像是 ctrlq.org 和 hundredzeros.com 也深受其害,黑客成功從網路上拿下了這些網站。
托管網站的主機商表示這可能發生於某些使用舊版的 WordPress 網站,導致密碼不幸洩漏,這段時間雖然歷經一些艱難,但幸運的是被刪除的網站已經回復,且流量也回到正常。
以下是我所做的變更,用來提高我的 WordPress 網站安全性,縱使這樣的意外可能再次發生。
當你安裝完一個 WordPress 網站時,預設的第一位用戶為 “admin”。你應該建立不同的使用者名稱來管理你的 WordPress 網站,並將預設使用者 “admin” 刪除,或是將它的權限從「系統管理員」降級為「讀者」。
你也可以建立一個完全亂數(難以被猜中)的使用者名稱,然後使用你的 Email 來登入 WordPress。外掛 WP-Email Login 可以加入此支援,使用你的 Email 取代帳號登入。
WordPress 網站會在原始碼顯示版本號,讓其他人能夠知道你正在執行舊的 WordPress。
要從網頁裡移除 WordPress 版本是很簡單的一件事,但你需要做一些額外的補強,從你的 WordPress 目錄將 readme.html 檔案刪除,因為它也會把你所使用的 WordPress 版本展示給全世界。
登入你的 WordPress 網站 Linux 系統列,執行以下指令來取得所有「公開」、其他用戶皆能寫入的目錄清單。
find . -type d -perm -o=w
你也許可以執行以下兩行指令,來將你 WordPress 內的檔案和目錄設定為正確的權限( 參考資料)。
find /your/wordpress/folder/ -type d -exec chmod 755 {} \; find /your/wordpress/folder/ -type f -exec chmod 644 {} \;
對目錄來說,755(rwxr-xr-x) 意味著只有擁有者具備寫入權限,其他人只有讀取和執行的權限。對檔案來說,644 (rw-r–r–) 意味著只有檔案擁有者具備讀取和寫入權限,其他人為唯讀。
如果你使用預設選項來安裝 WordPress 的話,你的 WordPress 資料表應該會像是 wp_posts 或 wp_users。將資料表的前綴(wp_)更改為其他隨機值是比較好的作法,外掛 Change DB Prefix 可以讓你在彈指之間重新命名你的資料表前綴。
這很重要。開啟你 WordPress 根目錄底下的 .htaccess 檔案,然後在最上方加入這行。
Options -Indexes
這能夠防止其他人在能建立檔案清單時看到你資料夾內的所有檔案。例如目錄下缺少預設的 index.php 或 index.html 時。
開啟此網頁來為你的 WordPress 網站產生八組安全密鑰。開啟 WordPress 目錄下的 wp-config.php 檔案,將預設的密鑰以產生的密鑰取而代之。
這些隨機的字串能使你儲存於 WordPress 的密碼更加安全,另一個好處是,當有人在你不知情的情抗下登入 WordPress,他們將會被立即登出,使他們的 cookies 失效。
從錯誤記錄有時候可以發現針對你 WordPress 所發出的無效資料庫查詢或檔案查詢。我更喜歡外掛 Error Log Monitor,因為它能定期透過 Email 發送錯誤日誌到你的信箱,也能顯示於你的 WordPress 控制台。
要在 WordPress 啟用錯誤日誌功能,將以下程式碼加入你的 wp-config.php 檔案,記得要把 /path/to/error.log 替換為你的日誌文件實際路徑。error.log 應該放在無法直接從瀏覽器存取得到的目錄。( 參考資料)
define('WP_DEBUG', true); if (WP_DEBUG) { define('WP_DEBUG_DISPLAY', false); @ini_set('log_errors', 'On'); @ini_set('display_errors', 'Off'); @ini_set('error_log', '/path/to/error.log'); }
使用密碼來保護 wp-admin 目錄是一個不錯的方法,因為瀏覽你的公開 WordPress 網站並不需要用到這目錄下的任何檔案。一旦設定完成,即使是授權的用戶也需要輸入兩道密碼才能登入他們的 WordPress 控制台。
你可以在 Linux 下使用 “last -i” 指令來列出所有登入你 WordPress 伺服器的使用者,包括他們的 IP 位址。如果你發現清單內有未知的 IP 來源,那肯定要修改密碼了。
此外,下面的指令將顯示較長時間區間的登入動態,並使用 IP 位址分組(將 USERNAME 改為你的使用者名稱)。
last -if /var/log/wtmp.1 | grep USERNAME | awk '{print $3}' | sort | uniq -c
WordPress.org 外掛庫包含不少好用的安全相關外掛,可以持續監控你的 WordPress 網站是否有被入侵,或是其他可疑活動。這些是我會建議使用,也較為基本的安全外掛。
小技巧:你也可以使用以下 Linux 指令來列出近三天被修改的檔案清單。將 mtime 改為 mmin 可以看到 “n” 分鐘前被修改的檔案清單。
find . -type f -mtime -3 | grep -v "/Maildir/" | grep -v "/logs/"
你的 WordPress 登入頁面是每個人都可以存取的,但如果你想防止未授權的使用者登入 WordPress,你有以下三種選擇。
深入閱讀:
喜歡 免費資源網路社群的文章嗎?歡迎追蹤我們的 Facebook、 Twitter 和 Google+,或是 透過 Email 訂閱更新。