什麼是混合內容?

如果網頁的初始 HTML 是透過安全的 HTTPS 連線載入,但其他資源 (例如圖片、影片、樣式表和指令碼) 是透過不安全的 HTTP 連線載入,該網頁就會有複合型內容。這個名稱是指單一網頁上同時有 HTTP 和 HTTPS 內容。

使用不安全的 HTTP 協定要求子資源會降低網頁安全性,因為這些要求容易遭受路徑攻擊,攻擊者會竊聽網路連線,並查看或修改兩方之間的通訊內容。攻擊者可以利用這些資源追蹤使用者、替換網站上的內容,如果是主動式混合內容,他們就能完全掌控網頁,而不只是不安全的資源。

雖然許多瀏覽器會向使用者回報混合內容警告,但通常為時已晚:不安全的要求已執行,網頁安全性也遭到破壞。

基於安全考量,大多數瀏覽器現在都會封鎖混合內容。將不安全的內容要求變更為安全內容,確保網頁持續正確載入。

複合型內容的兩種類型

混合內容分為主動和被動兩種。

被動式複合型內容 (包括圖片、影片和音訊) 不會與網頁的其餘部分互動,因此如果中間人攻擊攔截或變更這類內容,能執行的動作會受到限制。

有效複合型內容會與整個網頁互動。包括指令碼、樣式表、iframe,以及瀏覽器可下載及執行的任何其他程式碼。攻擊者可利用有效複合型內容攻擊,對網頁執行幾乎任何動作。

被動複合型內容

被動複合型內容的風險比主動複合型內容低,但仍有風險。舉例來說,攻擊者可以:

  • 攔截網站上圖片的 HTTP 要求,並交換或替換這些圖片。
  • 替換按鈕上的圖片,讓使用者混淆,例如刪除他們原本想儲存的內容。
  • 將圖片換成色情內容,毀損網站。
  • 將產品圖片換成其他內容的廣告。

即使攻擊者沒有變更網站內容,他們也能透過混合內容要求追蹤使用者。此外,瀏覽器載入圖片或其他資源時,也能判斷使用者造訪的網頁和瀏覽的產品。

如果網頁含有被動混合內容,即使網頁本身是透過 HTTPS 載入,大多數瀏覽器仍會在網址列中指出網頁不安全。您可以在這項示範中觀察這項行為。

直到最近,所有瀏覽器都會載入被動混合內容,因為封鎖這類內容會導致許多網站無法正常運作。這種情況即將改變,因此請務必更新網站上的所有混合內容例項。

在某些情況下,Chrome 會自動升級被動式複合型內容。也就是說,如果資產已硬式編碼為 HTTP,但可透過 HTTPS 存取,瀏覽器就會載入 HTTPS 版本。如果沒有安全版本,素材資源就不會載入。

每當 Chrome 偵測到複合型內容或自動升級被動式複合型內容時,都會在開發人員工具的「問題」分頁中記錄詳細訊息,協助您修正特定問題。

Chrome 開發人員工具的「問題」分頁會顯示特定混合內容問題的詳細資訊,以及修正方法
開發人員工具會列出每個不安全的資源,以及限制狀態。

有效複合型內容

有效複合型內容比被動複合型內容更具威脅性。攻擊者可以攔截並重寫有效內容,藉此完全掌控您的網頁,甚至是整個網站。包括顯示不同內容、竊取使用者密碼或其他登入憑證、竊取使用者工作階段 Cookie,或將使用者重新導向至完全不同的網站。

由於主動混合內容的風險極高,大多數瀏覽器預設會封鎖這類內容,以保護使用者,但不同瀏覽器供應商和版本之間的行為有所差異。

這項示範會顯示主動混合內容的範例。透過 HTTP 載入範例,即可查看透過 HTTPS 載入範例時遭到封鎖的內容。開發人員工具的「問題」分頁也會詳列遭到封鎖的內容。

Chrome 開發人員工具的「問題」分頁會顯示特定混合內容問題的詳細資訊,以及修正方法
為加強網站安全性,系統會封鎖部分不安全資源。

複合型內容規格

瀏覽器會遵循混合內容規格, 其中定義了可選擇封鎖的內容可封鎖的內容 類別。

「當允許資源做為複合型內容使用的風險,大於破壞網頁重要部分的風險時」,該資源即符合可選擇封鎖內容的資格。這是被動混合內容的子集。

所有非可選用封鎖的混合內容都視為可封鎖,瀏覽器應封鎖這類內容。

近年來,HTTPS 使用率大幅提升,已成為網路上的預設通訊協定。因此,瀏覽器現在更有可能考慮封鎖所有混合內容,包括混合內容規格中定義為可選擇封鎖的子資源類型。

舊版瀏覽器

部分訪客可能使用舊版瀏覽器。不同供應商的瀏覽器版本會以不同方式處理混合內容。最糟的情況是,舊版瀏覽器完全不會封鎖任何混合內容,對使用者而言並不安全。

安全地載入所有資源並修正混合內容問題,可確保內容顯示正常,並保護使用者免於接觸舊版瀏覽器可能不會封鎖的危險內容。