WordPress 安全與加固,權威指南

已發表: 2021-01-26

WordPress 廣受歡迎。 互聯網上大約有五分之一的網站以某種形式使用 WordPress。 無論是運行一個不起眼的博客,還是一個多站點內容管理系統 (CMS) 或電子商務站點。 因此,WordPress 網站成為經驗豐富的黑客和腳本小子的熱門目標也就不足為奇了。

任何網站管理員最不想看到的就是發現他們的網站已被黑客入侵; 可能被劫持並成為殭屍網絡的一部分、傳播惡意軟件或參與拒絕服務 (DoS) 攻擊。 在本文中,我們將分享一些技巧和策略來幫助您強化 WordPress 網站。

目錄

  • WordPress安全嗎?
  • 插件和主題
    • 運行更少的軟件
    • 遵守最小特權原則
    • 更新您的 WordPress 插件和主題
    • 遠離“無效”的 WordPress 插件和主題
  • 讓 WordPress 保持最新狀態
  • WordPress 託管
  • WordPress儀表板
    • 禁用註冊
    • 證書
    • 兩因素身份驗證 (2FA)
  • 強化 WordPress 核心
    • 禁用調試日誌記錄
    • 禁用 XML-RPC
    • 限制 WordPress REST API
    • 防止 WordPress 版本洩露
    • 防止 WordPress 用戶枚舉
    • 禁用 WordPress 文件編輯器
    • 禁用主題和插件管理
  • TLS (SSL)
  • 結論和後續步驟

WordPress安全嗎?

這是許多系統管理員提出的問題,這是理所當然的。 雖然 WordPress 總體上構建良好且安全,但它以容易出現安全漏洞而不是“企業級”而聞名。 這種名聲並不完全公平。 通常情況下,問題在於 WordPress 是一個非常受歡迎的軟件包,它易於設置,同時採用安全快捷方式。 這就引出了我們的第一個主題——插件和主題。

插件和主題

困擾 WordPress 安全性的頭號問題也是它非常受歡迎的原因。 WordPress 插件和主題在質量和安全性方面差別很大。 儘管 WordPress 團隊已經做了大量工作來幫助開發人員構建更安全的插件和主題,但它們仍然是安全的噩夢。 當使用維護不善的插件或從粗略來源獲得的插件時,會注意到這一點。

在我們繼續討論 WordPress 插件和主題之前,讓我們先了解一下 WordPress 插件到底是什麼。 插件只是 WordPress 運行以擴展 WordPress 功能的自定義 PHP 代碼。 有關更詳細和技術性的說明,請參閱什麼是 WordPress 插件。

同樣,WordPress 主題允許自定義 WordPress 網站的視覺方面。 從攻擊者的角度來看,兩者之間幾乎沒有區別,因為兩者都可以被濫用來運行惡意代碼。

運行更少的軟件

那麼如何判斷插件是否惡意? 這是一個複雜的問題,但幸運的是,我們為您提供了答案。 我們已經詳細介紹瞭如何為您的 WordPress 網站選擇最佳 WordPress 插件。

即使您進行了所有必要的研究,該插件也有可能仍然是安全威脅。 因此,降低風險的方法之一是只運行您絕對需要和信任的軟件。 在安裝新的 WordPress 插件之前,問問自己是否真的需要安裝該插件。 特定於站點的插件中的小代碼片段可以解決問題,還是您合法地需要一個完全成熟的插件?

重要— 對您在 Internet 上找到的代碼片段保持高度警惕。 除非你完全理解它在做什麼,否則永遠不要使用一段代碼——僅僅因為它在 StackOverflow 上,並不意味著它可以安全使用。

如果您確實需要運行插件,請確保它得到積極維護並定期更新,正如我們在指南中解釋的那樣。 根據經驗,插件或主題的下載和最近更新越多,表明它被廣泛使用並且它的作者正在積極維護它。 這並不意味著插件永遠不會有漏洞。 但是,如果發現漏洞,開發人員將迅速採取行動並迅速發布修復程序。

盡量避免下載量不多的插件,關鍵是沒有活躍的社區和定期更新。 如果一年內沒有收到更新,通常是危險信號。

遵守最小特權原則

WordPress 不需要使用 MySQL root 用戶來連接到它的數據庫。 也不需要每個 WordPress 用戶都具有管理員角色。 同樣,以特權用戶身份運行大多數程序也不是一個好主意,除非有特定的理由這樣做。

安全最佳實踐始終要求應用程序始終被授予允許其正常工作的最低權限,並禁用任何其他權限。 這種做法通常被稱為最小特權原則。

讓我們假設 WordPress 正在使用特權用戶帳戶連接到數據庫。 如果 WordPress 插件包含 SQL 注入漏洞,攻擊者可能不僅能夠以管理員身份運行 SQL 查詢,在某些情況下他們甚至可能能夠執行操作系統命令。 如果攻擊者成功執行操作系統命令,他們可能能夠進行偵察並將攻擊進一步升級到其他系統。

以管理權限運行軟件,或為用戶提供不必要的更多訪問權限是自找麻煩。 它違背了久經考驗的最小特權原則,因為它允許攻擊者在發生安全漏洞時造成更大的破壞。

WordPress 的好處是它具有許多內置角色,您可以使用它們為不同的用戶分配不同的權限,具體取決於他們的要求。 關於如何使用 WordPress 用戶角色來提高 WordPress 安全性,我們已經對此進行了大量撰寫。

更新您的 WordPress 插件和主題

WordPress 插件和主題更新很重要,不僅可以從新功能和錯誤修復中受益,還可以修補安全漏洞。 插件和主題都可以在 WordPress 界面中輕鬆更新。

一些商業插件可能有自己的機制來保持插件最新,但是,在大多數情況下,這對用戶是透明的。 儘管如此,只要確保使用任何更新系統,您的插件和主題都會保持最新。

不要使用“無效”的 WordPress 插件和主題

WordPress無效的插件
WordPress 使用 GPL 1 . 無需贅述,GPL 許可允許任何人自由分發 GPL 許可的軟件。 這包括商業/高級 GPL 許可的 WordPress 主題和插件。 因此,下載修改過的(通常稱為無效的)高級主題或插件並免費使用可能並不違法。

但是,正如您可能已經猜到的那樣,除了不支持插件開發人員之外,您不太可能收到無效插件的更新。 更重要的是,您無法知道該插件的源代碼是否已被修改為做一些邪惡的事情。

讓 WordPress 保持最新狀態

就像您應該使您的插件和主題保持最新一樣,您也應該注意保持您正在運行的 WordPress 版本是最新的。 幸運的是,現在這比過去容易得多,關鍵的安全更新會自動發生。 當然,除非您明確禁用此功能。

除了新功能、改進和錯誤修復之外,WordPress 核心更新還包含安全修復,可以保護您免受攻擊者利用您的 WordPress 網站並將其用於不義之財。

WordPress 託管

WordPress 託管 您選擇在何處以及如何託管您的 WordPress 網站將在很大程度上取決於您的要求。 雖然自己託管和管理 WordPress 沒有任何問題,但如果您不那麼精通技術,或者您想確保在不做大量繁重工作的情況下滿足大多數 WordPress 安全基礎知識,您可能需要選擇託管的 WordPress 託管服務提供商,例如 Kinsta 或 WP Engine。

由於我們有兩個主機託管的網站,我們已經寫了關於它們的文章。 在我們的客戶故事中,我們強調了我們與他們的經驗。 要了解有關您的體驗的更多信息,請閱讀我們的 WP Engine 和 Kinsta 客戶故事。 託管 WordPress 託管抽像出許多您需要擔心的安全決策和配置。

自然,託管的 WordPress 託管也可能不適合您。 您可以選擇自己託管 WordPress,尤其是在預算有限的情況下。 自託管 WordPress 還可以讓您更好地控制 WordPress 安裝。 要了解有關所有不同 WordPress 託管選項以及最適合您的選項的更多信息,請參閱選擇 WordPress 託管的指南。

WordPress儀表板

您網站的 WordPress 儀表板是您不希望任何未經授權的人潛伏的地方。 雖然有些網站有正當理由允許公共用戶使用 WordPress 儀表板登錄,但這是一個巨大的安全風險,必須非常仔細地考慮。

幸運的是,大多數 WordPress 網站沒有此要求,因此應該阻止訪問 WordPress 儀表板。 有幾種方法可以做到這一點,您應該選擇最適合您的方法。

一種常見的做法是通過密碼保護 WordPress 管理員 (wp-admin) 頁面來限制訪問。 另一種解決方案是只允許訪問 /wp-admin 到多個選定的 IP 地址。

禁用註冊

默認情況下,WordPress 不允許公共用戶註冊到您的 WordPress 網站。 要確認已禁用用戶註冊:

  1. 前往 WordPress 儀表板區域中的設置>常規頁面
  2. 導航到會員部分
  3. 確保選中任何人都可以註冊旁邊的複選框。

證書

與任何其他網站一樣,對您的 WordPress 儀表板的訪問權限與您的憑據一樣強大。 實施強大的 WordPress 密碼安全性是任何系統的關鍵安全控制,WordPress 也不例外。

雖然 WordPress 沒有任何方法可以開箱即用地設置密碼策略,但 WPassword 之類的插件對於在所有有權訪問 WordPress 儀表板的用戶中強制執行密碼強度要求是絕對必要的。

在您的網站上實施強密碼安全性後,使用 WPScan 測試弱 WordPress 憑據,以確保沒有帳戶仍在使用弱密碼。

兩因素身份驗證 (2FA)

雙重身份驗證

WordPress 儀表板的另一個重要安全控制是要求雙重身份驗證。 如果攻擊者設法發現用戶密碼(例如,攻擊者可能從數據洩露中發現用戶密碼),雙因素身份驗證 (2FA) 會使攻擊者更難訪問您的 WordPress 儀表板。

幸運的是,在 WordPress 上設置兩因素身份驗證非常容易。 您可以使用許多高質量的插件來添加此功能。 閱讀適用於 WordPress 的最佳兩因素身份驗證插件,了解可用於 WordPress 的頂級 2FA 插件的亮點。

強化 WordPress 核心

儘管 WordPress 的核心是一個安全的軟件,但這並不意味著我們不能進一步強化它。 以下是一些特定於 WordPress 核心的強化策略。

確保禁用調試日誌記錄

WordPress 允許開發人員將調試消息記錄到文件中(默認為 /wp-content/debug.log)。 雖然這在開發環境中是完全可以接受的,但請記住,如果相同的文件和/或設置進入生產環境,攻擊者也可以輕鬆訪問此文件。

默認情況下禁用 WordPress 調試。 雖然最好仔細檢查一下——確保沒有在 wp-config.php 文件中定義 WP_DEBUG 常量,或者將其顯式設置為 false。 有關所有調試選項的列表,請參閱 WordPress 調試指南。

如果出於某種原因您需要在您的生活網站上使用 WordPress 調試日誌,請登錄到您的 Web 服務器根目錄之外的文件(例如 /var/log/wordpress/debug.log)。 改變 pa

define('WP_DEBUG_LOG', '/path/outside/of/webserver/root/debug.log');

禁用 XML-RPC

WordPress 的 XML-RPC 規範旨在允許不同系統之間的通信。 這意味著幾乎任何應用程序都可以與 WordPress 交互。 WordPress XML-RPC 規範歷來對 WordPress 很重要。 它允許它與其他系統和軟件交互和集成。

好消息是 XML-RPC 已被 WordPress REST API 取代。 強調有關 XML-RPC 的一些安全問題; 多年來,它的界面一直是眾多安全漏洞的根源。 它也可以被攻擊者用於用戶名枚舉、密碼暴力破解。 或通過 XML-RPC pingback 進行的拒絕服務 (DoS) 攻擊。

因此,除非您正在積極使用 XML-RPC 並且有適當的安全控制,否則您應該禁用它。 由於無需安裝第三方插件即可輕鬆實現這一點,我們將在下面介紹如何做到這一點。

雖然您可以簡單地將 Web 服務器配置為阻止對 /xmlrpc.php 的訪問,但這樣做的首選方法是使用內置的 WordPress過濾器顯式禁用 XML-RPC。 只需將以下內容添加到插件文件並在您的站點上激活它。

add_filter('xmlrpc_enabled', '__return_false');

當心

  • 使用 WordPress必須使用插件來處理這個和其他類似的代碼片段是個好主意。

限制 WordPress REST API

與 XML-RPC 一樣,WordPress API 是第三方應用程序與 WordPress 通信的現代方式。 雖然使用安全,但建議限制其中的某些功能,以防止用戶枚舉和其他潛在漏洞。 與 XML-RPC 不同,WordPress 沒有提供一種簡單的本地方式來完全禁用 REST API(它曾經2 , 但這已被棄用,因此明智的做法是不再這樣做),但是,您可以限制它。

與 WordPress 一樣,您可以使用插件來實現此目的,也可以將以下過濾器添加到插件文件並在您的站點上激活它。 以下代碼將通過使用 rest_authentication_errors WordPress 掛鉤返回未經授權的 HTTP 狀態代碼(狀態代碼 401)來為未登錄的任何人禁用 WordPress REST API。

add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
}
return $result;
});

此外,WordPress REST API 默認啟用 JSONP。 JSONP 是一種在現代瀏覽器支持 CORS(跨源資源共享)之前繞過瀏覽器同源策略的舊技術。 由於這可能被攻擊者用作攻擊中的一個步驟,因此沒有真正的理由啟用它。 建議使用以下 PHP 片段使用 rest_jsonp_enabled WordPress 過濾器禁用它。

add_filter('rest_enabled', '__return_false');

有關它的更多信息,請參閱過濾器的文檔。

防止 WordPress 版本洩露

與許多其他 Web 應用程序一樣,默認情況下,WordPress 在許多地方公開其版本。 版本洩露並不完全是一個安全漏洞,但是這些信息對於攻擊者在計劃攻擊時非常有用。 因此,禁用 WordPress 的版本披露功能可能會使攻擊變得更加困難。

WordPress 洩露了很多版本信息。 幸運的是,這個 GitHub gist 提供了一個完整的 WordPress 過濾器列表,可以以 WordPress 插件的形式禁用。 當然,您可以將此代碼合併到您已經擁有的任何現有的特定於站點或必須使用的插件中。

防止 WordPress 用戶枚舉

WordPress 容易受到許多用戶枚舉攻擊。 此類攻擊允許攻擊者確定存在哪些用戶,無論用戶是否存在。 雖然這看起來無害,但請記住,攻擊者可能會將此信息用作更大攻擊的一部分。 有關此主題的更多信息,請閱讀如何使用 WPScan 枚舉 WordPress 用戶。

為了防止 WordPress 用戶枚舉,您需要確保禁用或限制以下 WordPress 功能。

  • 將 WordPress REST API 限制為未經身份驗證的用戶
  • 禁用 WordPress XML-RPC
  • 不要將 /wp-admin 和 /wp-login.php 直接暴露在公共互聯網上

此外,您還需要配置 Web 服務器以防止訪問 /?author=<number>。 如果您使用的是 Nginx,您可以使用以下配置來防止 WordPress 用戶枚舉。

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule .* - [R=403,L]

或者,如果您使用的是 Apache HTTP Server,您可以使用以下配置來防止 WordPress 用戶枚舉。

if ( $query_string ~ "author=([0-9]*)" ) {
return 403;
}

禁用 WordPress 文件編輯器

WordPress 最危險的功能之一是能夠從 WordPress 儀表板本身編輯文件。 任何用戶都應該沒有正當理由需要這樣做,當然也不是 WordPress 核心。 如果有的話,您要確保使用高質量的文件完整性監控 (FIM) 安全插件確切知道哪些文件發生了更改。

要收到文件更改的警報,請使用我們開發的網站文件更改監視器插件。

對您網站的任何文件更改都應通過安全連接(例如 SFTP)進行,或者最好在版本控制存儲庫中進行跟踪並使用 CI/CD 進行部署。

要禁用 WordPress 儀表板中的插件和主題文件編輯器,只需將以下內容添加到您的 wp-config.php 文件中。

define('DISALLOW_FILE_EDIT', true );

禁用主題和插件管理

一個好的 WordPress 安全最佳實踐是從 WordPress 儀表板禁用插件和主題管理。 相反,請使用 wp-cli 等命令行工具進行這些更改。

通過禁用主題和插件更改,您可以大大減少 WordPress 網站的攻擊面。 在這種情況下,即使攻擊者成功入侵了管理員帳戶,他們也無法上傳惡意插件來升級攻擊,使其無法訪問 WordPress 儀表板。

wp-config.php 中定義的 DISALLOW_FILE_MODS 常量通過儀表板禁用插件和主題更新和安裝。 它還禁用儀表板中的所有文件修改,從而刪除主題編輯器和插件編輯器。

要在 WordPress 儀表板中禁用主題和插件修改,請將以下內容添加到您的 wp-config.php 文件中。

define('DISALLOW_FILE_MODS', true );

WordPress HTTPS (SSL / TLS)

傳輸層安全性 (TLS) 對您的 WordPress 安全來說是絕對必要的,它是免費且易於設置的。 注意:TLS 是取代安全套接層 SSL 的協議。 但是,由於 SSL 一詞非常流行,許多人仍然將 TLS 稱為 SSL。

當您通過 HTTPS(HTTP over TLS)訪問您的網站時,HTTP 請求和響應無法被攔截和窺探,或者更糟糕的是被攻擊者修改。

雖然 TLS 與您的 Web 服務器或內容交付網絡 (CDN) 的關係比您的 WordPress 安裝更多,但 TLS (WordPress HTTPS) 最重要的方面之一就是強制執行它。 網上有大量關於如何設置 WordPress HTTPS(SSL 和 TLS)的信息。

如果您不習慣編輯配置文件,並且更喜歡使用插件切換到 WordPress HTTPS,您可以使用真正簡單的 SSL 或 WP force SSL。 它們都是非常好且易於使用的插件。

更安全的 WordPress 的後續步驟

如果你已經做到了這一步,很好,但這並不意味著沒有更多的強化工作要做。 以下是您可以研究的一些項目,以進一步強化您的 WordPress 網站。

  1. 強化 PHP。 鑑於 PHP 是任何 WordPress 網站的核心組件,強化 PHP 是合乎邏輯的後續步驟之一。 我們在 WordPress 網站的最佳 PHP 安全設置中對此進行了廣泛的討論。
  2. 使用信譽良好的安全插件。 優質的安全插件提供了 WordPress 本身不包含的高級安全功能。 那裡有大量的 WordPress 安全插件。 但是,請務必選擇具有良好聲譽的插件,最好是可以提供高級或商業支持的插件,例如我們用於 WordPress 的高質量安全插件。
  3. 執行文件權限審核。 對於在 Linux 上運行的 WordPress 網站,不正確的文件權限可能會讓未經授權的用戶獲得對潛在敏感文件的訪問權限。 有關此主題的更多信息,請參閱我們的配置安全 WordPress 網站和 Web 服務器權限的指南。
  4. 執行備份文件審核。 意外留下可訪問的備份文件可能會洩露敏感信息。 這包括包含可能允許攻擊者控制整個 WordPress 安裝的秘密的配置。
  5. 強化您的網絡服務器
  6. 強化 MySQL
  7. 添加必要的 HTTP 安全標頭
  8. 確保您有一個正常工作的 WordPress 備份系統。
  9. 使用 DDoS 保護服務
  10. 實施內容安全策略
  11. 管理暴露的備份和未引用的文件。

結論——這只是 WordPress 安全之旅的第一步

恭喜! 如果您遵循上述所有建議並實施了所有推薦的安全最佳實踐,那麼您的 WordPress 網站就是安全的。 然而,WordPress 的安全性不是一次性修復——它是一個不斷發展的過程。 強化 WordPress 網站(一次性狀態)與多年保持安全之間存在很大差異。

加固只是 WordPress 安全過程(WordPress 安全輪)的四個階段之一。 對於一個全年安全的 WordPress 網站,您必須遵循測試 > 強化 > 監控 > 改進的迭代 WordPress 安全流程。 您必須不斷測試和檢查您的 WordPress 網站的安全狀態,強化軟件,監控系統並根據您所看到和學習的內容改進您的設置。 例如:

  • WPScan 等工具可以幫助您測試 WordPress 網站的安全狀況
  • WordPress 防火牆可以保護您的 WordPress 網站免受已知的惡意黑客攻擊
  • WordPress 活動日誌可以幫助您走很長一段路——通過記錄您網站上發生的所有更改,您可以提高用戶責任感,了解每個用戶在做什麼,並密切關注所有幕後活動
  • 我們的 WordPress 安全和管理插件等工具可以幫助您確保密碼安全、強化 WordPress 安全流程、收到文件更改警報等等

您擁有所有正確的工具來確保您的網站安全。 即使您運行一個小型 WordPress 網站,也要花時間逐步完成本指南。 確保您最終不會將工作投入到構建一個出色的網站上,結果卻被針對 WordPress 的攻擊洗劫一空。

沒有 100% 有效的安全性。 但是,通過應用本指南中介紹的各種強化技術,攻擊者很難獲得立足點並成功攻擊您的 WordPress 網站。 請記住,當攻擊者瞄准他們的下一個受害者時,您不必智取他們。 您只需要比下一個易受攻擊的網站更安全!

本文中使用的參考文獻[ + ]

本文使用的參考資料
1 https://en.wikipedia.org/wiki/GNU_General_Public_License
2 https://developer.wordpress.org/reference/hooks/rest_enabled/