網站所有者喜歡 WordPress。以至于大約 40%的人選擇它作為他們在線項目的基礎。然而,您可能會驚訝地發現,有些人不太了解世界上最流行的內容管理系統(CMS) 的工作原理。也許更令人擔憂的是,他們擔心 WP 安全性的某些方面,更具體地說,是散列用戶密碼的機制。讓我們更詳細地探索該領域,看看批評是否成立。
什么是哈希?
作為網站所有者,您有責任保護用戶數據免受黑客攻擊。存儲他們的密碼是其中的一個重要部分。想象一下,黑客設法突破了您的防御并竊取了您網站的數據庫。這已經是一場噩夢,因為根據您提供的服務類型,您的數據庫可能充滿了敏感信息。
但是,情況可能會變得更糟。如果您以純文本形式存儲用戶密碼,那么絕對沒有什么可以阻止黑客利用它們。我們都知道人們在多個不同的帳戶上重復使用相同的密碼。如果犯罪分子決定針對其他在線服務嘗試竊取的憑據,他們很有可能成功侵入。一次泄露可能導致大量數據泄露。
散列的目的是包含所有這些。散列是一種加密函數,可將文本轉換為由字母和數字組成的亂碼,稱為散列。當用戶選擇密碼時,Web 應用程序將其通過散列函數傳遞,然后將生成的散列存儲到數據庫中。
下次用戶嘗試登錄時,他們輸入的密碼會通過相同的機制,并將哈希值與存儲在數據庫中的內容進行比較。如果匹配,則系統允許用戶進入。如果不匹配,則網站返回錯誤。
有一些在線生成器可以說明 WordPress 密碼哈希的樣子。下面你可以根據Code Beautify 的生成器看到“Password123!#”的哈希值。散列的關鍵在于它是一種單向函數。理論上,應該不可能逆轉該過程并從哈希中導出純文本密碼。
然而,通常情況下,理論和現實并不匹配。有許多不同的散列算法,其中一些提供比其他更好的安全性。隨著硬件的發展,黑客的蠻力攻擊變得越來越強大,我們已經到了只有少數算法被認為足以正確保護用戶密碼的地步。
您可能需要一些幫助才能了解某些散列機制比其他機制強多少。為了說明差異,像Jeremi Gosney這樣的專家經常模擬針對流行散列算法的各種攻擊,并在專門用于密碼安全的活動中分享結果。
2012年,Gosney 使用一組 GPU 對幾種哈希算法的簡單實現發起暴力攻擊。我們現在將總結三種最流行的機制的結果。在對MD5 算法的攻擊中,Gosney每秒進行了 1800 億次猜測。有了這個,他將在九個多小時內成功猜出所有可能的 8 個字符的密碼。
在攻擊SHA1時,Gosney每秒進行大約 610 億次猜測,這將使他能夠在大約 27 小時內成功猜出所有 8 個字符的密碼。
在攻擊bcrypt時,他每秒只能進行71000 次猜測,這意味著他需要2700 年才能成功猜出所有可能的 8 個字符的密碼。
上面的數字是用現在大約十年前的 GPU 記錄的。現代硬件功能更強大,可以實現更快的蠻力攻擊。然而,Gosney 的結果在說明MD5 和 bcrypt 等算法之間的差異方面一如既往地出色。你會認為世界上最受歡迎的 CMS WordPress 會使用一種更難破解的算法。你可能會大吃一驚。
WordPress 使用什么類型的散列?
WordPress 最初有一個簡單的 MD5 散列算法實現。與許多競爭對手相比,MD5 有一個明顯的優勢——速度非常快。然而,即使早在 2007 年,針對 MD5 哈希的碰撞攻擊在普通 PC 上花費的時間也不超過幾秒鐘。不用說,當時 WP 的開發團隊因使用該算法而獲得了很多支持。
WordPress 2.5 于 2008 年發布,附帶PHPass(發音為 PH-Pass)。PHPass 是一個散列框架,支持多種散列算法,包括 MD5 和bcrypt。正如我們在上一節中建立的,bcrypt 比 MD5 強大得多,并且被廣泛認為是 PHP 應用程序的最佳哈希算法。
然而,WP 的 PHPass 實現至今仍在使用 MD5。在這一點上,我們需要強調一個事實,盡管 WordPress 的散列機制是基于 MD5 的,但它提供了足夠的安全性。
PHPass在散列之前為每個密碼添加加密鹽。鹽是在使用散列機制之前附加到純文本密碼的唯一數據。多虧了它,相同的密碼不會產生相同的哈希值,并且黑客很難猜測用戶選擇的密碼是什么。此外,PHPass 進行了八次基于 MD5 的散列,并采用密鑰和密碼拉伸技術進一步保護憑據。由于這一切,對 WordPress 散列機制的暴力攻擊是不切實際的。目前,就是這樣。
為什么 WordPress 繼續使用 MD5?
稍微倒帶一下,您會發現在 PHP 項目中實現一個強大的散列算法并不完全是在公園里散步。然而,PHP 5.5 引入了對 bcrypt 的官方支持,具有用于哈希密碼和在登錄嘗試期間驗證它們的本機函數。WordPress 的散列機制目前確實提供了足夠的安全性。盡管如此,許多人仍然認為,鑒于可以在沒有太多麻煩的情況下實施的更強大的算法的可用性,保持原樣是沒有意義的。
然而,WordPress 的開發團隊似乎奇怪地不愿意對核心的這個特定部分進行任何更改。這樣做的原因是向后兼容。WordPress 保持其受歡迎程度并繼續擴大其市場份額,不僅因為它的用途廣泛且易于使用,而且因為它幾乎可以在任何托管平臺上運行。太多的人使用遺留系統來構建新項目,并且許多現有的網站在非常過時的托管環境中運行。
舊軟件使這些項目成為黑客的避風港,因此 WP 的散列機制可能是他們最不擔心的問題,特別是考慮到它提供的良好安全性。CMS 的開發人員知道更改散列機制可能會影響很多項目,他們不愿意這樣做。
這是“如果它沒有損壞,就不要修復它”策略的例證,您必須同意,特別是考慮到可能受到影響的人數眾多,其背后有一些邏輯。但是,許多網站所有者認為安全是組織項目各個方面的最高優先級。對他們來說,使用基于像 MD5 這樣弱的算法的散列機制還不夠好。對他們來說幸運的是,還有其他選擇。
使用插件更改 WordPress 網站的哈希算法
得益于WP 的模塊化架構,您可以輕松更改網站的密碼存儲系統。在 WP 的官方插件目錄中搜索“bcrypt”,你會發現相當多的匹配項。安裝它們是一個標準的、兩次點擊的工作,而且幾乎所有人都承諾從 MD5 切換到 bcrypt 而不告訴所有用戶重置他們的密碼。Roots.io是一家創建各種WordPress 開發工具的公司,也有一個插件可以讓您使用 bcrypt。但是官方目錄上沒有,所以安裝過程不一樣。讓我們按照步驟操作。
1. 從 GitHub 下載插件。
Roots 的插件可在此處獲得。要下載它,請單擊代碼,然后選擇下載 ZIP。在您的計算機上保存文件后,您需要解壓縮存檔。
2. 在 wp-content 文件夾中創建一個新目錄。
Roots 創建的插件需要在“wp-content”目錄下創建一個名為“mu-plugins”的文件夾。您可以通過 SSH、網絡托管控制面板中的文件管理器或您最喜歡的 FTP 客戶端來完成。
3. 上傳 wp-password-bcrypt.php 文件。
要安裝和激活插件,請將“wp-password-bcrypt.php”文件上傳到“mu-plugins”文件夾。
注意:您不需要上傳存檔的全部內容。只需要 PHP 文件。
該插件將出現在必須使用選項卡下的插件>已安裝插件菜單中。因為 Roots.io 的插件是所謂的必備插件之一,它會在安裝時自動激活,用戶無法從 WordPress 儀表板停用它。擺脫它的唯一方法是將它從 mu-plugins 目錄中刪除,因此如果多個人可以訪問WP 儀表板并且您想確保他們不會干預網站的內容,那么使用它是一個好主意密碼哈希機制。
所有 bcrypt WP 插件都在后臺運行,你不能期待任何不同的特性或功能。但是,插件解決問題的方式有所不同。一些使用原生 PHP 函數來散列和驗證密碼,而另一些則重新配置 PHPass 框架以使用 bcrypt 而不是 MD5。在所有情況下,您都需要PHP 5.5 或更新版本,無論如何您都應該使用它。插件的選擇取決于個人喜好。如果它們在您看來都一樣,請務必閱讀評論并了解使用它們的人的想法。
結論
盡管 WP 的密碼存儲系統不是基于當前可用的最安全的哈希算法,但不會對您的網站及其訪問者的安全造成直接威脅。然而,WP 的模塊化架構和使項目保持活力的全球社區意味著您只需單擊幾下鼠標就可以使用更復雜的密碼哈希算法。說相同的架構和社區使 WordPress 成為世界上最流行的網站建設應用程序,你不會錯。