什麼是混合內容?

當使用者透過安全的 HTTPS 連線載入初始 HTML 時,該網頁會顯示「複合型內容」,但網頁、影片、樣式表和指令碼等其他資源 (例如圖片、影片、樣式表和指令碼) 是透過不安全的 HTTP 連線載入。該名稱是指單一網頁上的 HTTP 和 HTTPS 內容組合。

使用不安全的 HTTP 通訊協定要求子資源會降低網頁的安全性,因為這些要求較容易遭受「路徑上攻擊」,攻擊者會在網路連線和檢視畫面上竊聽,或是修改雙方之間的通訊。只要利用這些資源,攻擊者就能追蹤使用者及替換網站上的內容。如果混合使用中的混合內容,他們就能完全掌控網頁,而不只是使用不安全的資源。

雖然許多瀏覽器向使用者回報複合型內容警告,但報告通常還是太晚:系統已執行不安全的要求,且維護網頁的安全性。

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

複合型內容的兩種類型

複合型內容分為兩種類型:主動式和被動內容。

被動式複合型內容 (包括圖片、影片和音訊) 不會與網頁的其他部分互動,因此如果中間人攻擊攔截或變更該內容,便會禁止攔截式攻擊。

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

被動複合型內容

與主動式複合型內容相比,被動複合型內容的風險較低,但仍然存在風險。舉例來說,攻擊者可以:

  • 攔截網站上圖片的 HTTP 要求,並替換或取代這些圖片。
  • 取代按鈕上的圖片,讓使用者感到困惑,並刪除想要儲存的內容。
  • 以色情內容取代圖片,讓網站更臻完美。
  • 將產品圖片換成其他產品的廣告。

即使攻擊者並未變更您的網站內容,他們仍可透過混合內容要求來追蹤使用者。也可以根據瀏覽器載入的圖片或其他資源,得知使用者造訪哪些網頁,以及瀏覽了哪些產品。

如果存在被動式複合型內容,大多數的瀏覽器都會在網址列中註明並不安全,即使網頁本身是透過 HTTPS 載入也一樣。您可以在這個示範中觀察這種行為。

不久之前,被動複合型內容載入於所有瀏覽器,因為封鎖這類內容原本會導致許多網站毀損。由於新的做法已經開始發生變化,請務必更新網站上所有包含複合型內容的情況。

在某些情況下,Chrome 會自動升級被動複合型內容。這表示如果素材資源是以 HTTP 硬式編碼的方式寫入,但可透過 HTTPS 使用,瀏覽器會載入 HTTPS 版本。如果沒有安全版本,系統就不會載入該素材資源。

只要 Chrome 偵測到複合型內容或自動升級被動複合型內容,就會記錄開發人員工具中的「Issues」分頁,協助您修正特定問題。

Chrome 開發人員工具的「問題」分頁會顯示特定複合型內容問題的詳細資訊和修正方式
開發人員工具會列出每項不安全的資源,並附帶限制狀態。

使用中的複合型內容

活躍的複合型內容比被動複合型內容有著更大的威脅。攻擊者可能會利用這項功能攔截及改寫主動內容,以便完全掌控您的網頁甚至整個網站。如此一來,他們就能變更網頁的任何部分,包括顯示不同內容、竊取使用者密碼或其他登入憑證、竊取使用者工作階段 Cookie,或是將使用者完全重新導向至其他網站。

由於主動式複合型內容的風險非常高,因此大部分瀏覽器都已預設封鎖這類內容,以便保護使用者,但瀏覽器廠商和版本的行為有所不同。

這個示範頁面提供有效混合內容的範例。透過 HTTP 載入範例,查看透過 HTTPS 載入範例時封鎖的內容。如需封鎖內容的詳細資訊,也可以在開發人員工具的「問題」分頁中查看。

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

複合型內容規格

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

「當允許使用混合內容的風險大於網路重大部分的風險時,資源就屬於選擇性可封鎖的內容」。這是被動複合型內容的一部分。

系統會將無法選擇性封鎖的複合型內容視為「可封鎖」,因此應會遭到瀏覽器封鎖。

近年來,HTTPS 使用量大幅增加,並已成為網路上相當明確的預設設定。如此一來,瀏覽器現在就更容易考慮封鎖所有複合型內容,包括在混合內容規格中定義的子資源類型為「選擇性封鎖」

舊版瀏覽器

部分訪客可能使用舊版瀏覽器。不同廠商的瀏覽器版本處理複合型內容的方式也不同。更糟的是,舊版瀏覽器和版本完全不會封鎖任何混合內容,這對使用者來說不安全。

透過安全的方式載入所有資源並修正混合內容問題,確保內容可見,並避免使用者接觸到舊版瀏覽器未封鎖的危險內容。