常识里,我们知道HTTP网页肯定是可以加载HTTPS内容的,但是在HTTPS网页能否加载HTTP内容呢?
好像能又好像不能。这是我在写这篇文章之前的感受。为什么呢?
因为某些HTTP资源确实是可以在HTTPS内加载的,但有些又不可以。
那实际情况又是怎么样的呢?
定义
HTTPS网页加载HTTP内容,官方定义的名称叫混合内容(mixed content)。
混合内容分两种类型:混合被动内容(mixed passive content)和混合主动内容(mixed display content)
区别在于威胁程度的高低。
第一种混合被动内容可以认为威胁很低,最坏的情况也就是网页可能出现损坏或误导性的内容。
而在混合主动内容的情况下,威胁会导致网络钓鱼、敏感数据披露、重定向到恶意网站等等。
混合被动内容(mixed passive content)
主要是下面四个:
- img (src属性)
- audio (src属性)
- video (src属性)
- object 子资源
混合主动内容(mixed display content)
说的是可以访问全部或部分HTTPS页面文档对象模型的内容。
这种类型的混合内容可以改变HTTPS页面的行为并可能向用户窃取敏感数据。因此,除了上述混合显示内容所描述的风险,混合活动内容还很容易受到其他一些攻击向量的攻击。
主要有:
- script (src属性)
- link href属性
- XMLHttpRequest object请求
- iframe (src属性)
- 所有在CSS使用url的值,比如@font-face, cursor, background-image等
- object (data属性)
现实情况
有些低版本手机加载https内容,比如音频,会出现无法加载的情况。
建议在处理某些低版本手机,可以考虑加上onerror="this.src='http://example.com/xxx'"
;