隨著網路成為全球最強大的應用平台,許多網站開始依賴 JavaScript 來實現各種功能。然而,JavaScript 的安全性問題,特別是在加密方面,仍然存在很大的風險。這篇文章將探討如何改善 JavaScript 的信任性,並介紹一個名為 Web 應用完整性、一致性與透明性(WAICT)的新系統,旨在提高網路應用的安全性,並減少駭客攻擊的機會。
JavaScript 加密的挑戰
JavaScript 本身並不適合處理敏感的加密操作,尤其是當涉及到需要高度安全性的應用程式時。例如,一個端對端加密的訊息應用,會在用戶端生成加密密鑰,從而實現訊息的加密與解密。然而,如果應用的 JavaScript 被駭客入侵,那麼駭客可能會修改代碼來竊取用戶的加密訊息,這使得傳統的 JavaScript 加密方法在這種情境下極為脆弱。
這個問題與手機應用有所不同,因為手機應用是由應用商店進行嚴格的審核和加密,並確保應用的完整性。這樣的審核機制保證了下載到用戶裝置上的應用程式不會被篡改。
Web 應用完整性、一致性與透明性(WAICT)的標準
如果我們希望網站能夠像手機應用一樣安全,避免被駭客篡改,就需要為 Web 應用提供類似的保護措施。這意味著,網站應該能夠保證其代碼的完整性,並且即使受到攻擊,使用者也能夠查證網站的真實性。
這就是為什麼 Cloudflare 和其他瀏覽器提供商攜手合作,開發出了一個名為 Web 應用完整性、一致性與透明性(WAICT)的標準。WAICT 旨在為所有 Web 應用帶來更強的安全保障,避免受到篡改或不正當修改。
為了討論一個 Web 應用的安全保證,首先需要精確定義這個應用程式到底是什麼。智能手機應用程式本質上是一個壓縮包文件。但是,一個網站由多個互聯的資源構成,包括 HTML、JavaScript、WASM 和 CSS,這些資源可以是本地或外部託管的。此外,任何資源的變更都可能大大改變應用的功能。因此,要定義一個應用程式,必須確保應用程式確定它加載的所有資源,這可以通過完整性功能來實現,我們現在來介紹這些功能。
- 子資源完整性(SRI)
SRI 是一種瀏覽器功能,允許網站指定外部資源(如 JavaScript 或 CSS)必須符合特定的加密哈希值。例如,當瀏覽器加載一個外部的 JavaScript 文件時,它會檢查該文件的哈希值是否與預期的一致。如果一致,則繼續執行;如果不一致,則拋出錯誤,並阻止執行。這樣,網站便能確保每次加載的資源都是未被篡改過的。 - 完整性清單(Integrity Manifest)
為了對整個網站的所有資源進行完整性驗證,WAICT 引入了「完整性清單」概念。這是一個配置文件,網站可以將其提供給瀏覽器,告訴瀏覽器所有可能加載的資源及其相應的哈希值。這樣,瀏覽器在加載網站資源時,會檢查每個資源的哈希值,確保它們未被修改過。 - 透明性:公開記錄與審計
透明性是指一個網站的所有代碼和資源都會被公開記錄在一個可以審計的日誌中。如果某個網站遭到駭客入侵並被篡改,外部審計人員仍然可以通過這些公開記錄追蹤到被修改的代碼,從而及早發現問題。 - 如何實現透明性:哈希鏈與公正見證
WAICT 方案的核心是使用哈希鏈來記錄網站的所有版本及其更新歷史。每當網站發佈新版本時,它的清單哈希值會被加入到一個「公開透明日誌」中,並由可信的第三方(稱為見證者)進行簽名。這樣,用戶就可以通過查閱這些公開記錄來確認網站是否曾經被篡改過。
WAICT 的工作原理:如何驗證網站的安全性
當使用者訪問一個開啟透明性功能的網站時,網站會提供其完整性清單,並附上所有見證者的簽名和加入日誌的證明。瀏覽器會檢查這些簽名,確認網站的完整性,並確保網站所提供的資源是安全且未被篡改的。這個過程中,有幾個關鍵步驟:
- 網站提供清單與證明:網站會提供完整性清單,並附帶證明該清單在透明日誌中。
- 見證者的簽名驗證:瀏覽器會檢查這些簽名,以確保它們來自可信的見證者。
- 完整性檢查:瀏覽器根據清單中的哈希值,對資源進行完整性檢查,確保網站內容未被修改。
WAICT 的未來:如何進一步提高 Web 安全性
WAICT 仍處於標準化的早期階段,未來會有更多的功能加入,包括支持更多類型的資源驗證(如 WebAssembly、圖片等)。此外,WAICT 也在考慮如何將區塊鏈技術與透明性結合,進一步增強透明性和可信度。
隨著網路威脅的增長,傳統的加密方法和防範機制已經無法應對當前的挑戰。WAICT 旨在提升 Web 應用的安全性,讓每一位使用者都能夠確信他們訪問的網站是可信的、未被篡改的。這不僅僅是對 Web 應用的提升,更是對整個網路生態系統的保護,未來我們期待看到這一標準的普及,讓每個人都能享受更加安全的網路體驗。
瞭解更多Cloudflare的Web安全性防禦:

