(摘自http://blog.aizhet.com/Windows/18415.html)
從 Firefox 18 開始,如果 HTTPS 頁面中包含非加密的 HTTP 內容,瀏覽器會在控制台輸出警告,記錄 Mixed Active Content 請求。而從 Firefox 23 開始,瀏覽器會默認阻止 HTTPS 頁面中可能影響網頁安全的 HTTP 請求(即阻止 Mixed Active Content)。這樣做會犧牲一些網站的兼容性,但對安全性的提高是很有幫助的。
獲取 Mixed Content 相當於發起部分加密的連接,其中未加密的部分存在被中間人攻擊的可能。不同類型的 Mixed Content 所產生的危害程度也有所不同,Mixed Passive Content 可能會使中間人獲取到用戶的設備信息,或讓用戶看到不正確的圖片、音頻等信息。而 Mixed Active Content 則可能導致用戶的敏感數據被竊取,比如賬號密碼等。
解決問題
解決方案一 (一勞永逸)
避免在 HTTPS 頁面中包含 HTTP 的內容。
解決方案二 (讓 Firefox 暫時不阻止)
解決方案三 (配置本地 Firefox,讓其不再阻止)
打開新標簽頁,在地址欄輸入 about:config,進入配置頁面。
為什么 Mixed Content Blocker 不是阻止所有的 HTTP 請求?
Mixed Content 可以分為兩類:
- Mixed Passive Content
- Mixed Active Content
Mixed Passive Content (a.k.a. Mixed Display Content)
Mixed Passive Content 是在 HTTPS 頁面中一些對安全性影響不大的 HTTP 內容,比如 Image、Audio、Video 等。即使這些內容被中間人篡改,所產生的影響也只是 —— 中間人得知了用戶的瀏覽器信息 (through user-agent included by HTTP headers)、用戶看到了一張不正確的圖片,這些被篡改的內容無法修改 DOM 樹,也無法執行。另外,Mixed Passive Content 在 Web 上普遍存在。因此 Firefox 默認不會阻止 Mixed Passive Content。
Mixed Active Content (a.k.a. Mixed Script Content)
Mixed Active Content 是在 HTTPS 頁面中一些能夠修改 DOM 樹的 HTTP 內容,如 JavaScript、CSS、XMLHttpRequest、iFrame 等。這些 HTTP 內容被中間人修改以后,可能會影響原有 HTTPS 內容的安全性,導致敏感的用戶數據被盜。因此 Firefox 會默認阻止 Mixed Active Content。
深入思考
為什么 Frame 應該是 Mixed Active Content?
Frame 之所以不能被分類為 Mixed Passive Content 主要有以下幾個原因: 一個 frame 可以將外層可靠的 HTTPS 頁面跳轉到惡意盜取信息的仿造頁面。 如果一個 HTTPS 頁面嵌套着 HTTP frame,而這個 frame 包含表單用以輸入用戶信息,那么用戶信息將會以 HTTP 方式傳送,有被中間攻擊者竊取的危險,而用戶卻毫不知情,還以為一切都在安全的 HTTPS 里。
如何判定 Mixed Content 是 Active 還是 Passive?
該 Mixed Content 是否會影響頁面的 DOM 結構。(Yes -> Active, No -> Passive)