(摘自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)