火狐教程:混合内容拦截/Mixed Content Blocker.
//关于Firefox的技巧的文档:侧边栏视图、缩略图视图,by江3如此多娇;本文更新地址,
//简介:
//非活动混合内容/显示性混合内容/Mixed Passive/Display Content:
//活动混合内容/Mixed Active Content:
//特例情况:
框架混合内容/Mixed Content in Framed Pages:
对象子请求/Object Subrequests:
//参数:
//火狐加密/证书,
//Chrome - 混合内容,
通过SSL加密的链接可以防止嗅探和中间人攻击,但是有些HTTPS链接的Site会引用来自非加密Sites的内容,这种行为叫做“混合”-Mixed.
混合内容属于部分加密连接,存在被嗅探和中间人攻击的可能;之前一些Web应用已经默认阻止其中的活动内容,比如Gmail、邮件客户端等,但这种拦截方式并非推广到客户端并成为网页渲染的默认处理方式,因为这样会破坏很多网站的兼容性。
Web控制台警告:
FF16开始会在控制台显示警告,记录混合内容请求,如下图,通过HTTP非加密请求的资源会以红色字体+【Mixed Content】标记
MDN将混合内容划分为:混合显示内容、混合脚本内容,这两种混合内容都存在被利用进行攻击的漏洞/威胁,只不过攻击面范围不同:
即HTTPS的Site包含的通过HTTP链接提供的内容,这些内容不可以替换/修改Page的其他部分。比如,攻击者可以替换通过HTTP提供的图片为其他不友好的图片或消息,攻击者还可以通过监测用户下载图片来源判断用户的活动,但这种检查一般是限于某个固定Site的某些特定Pages。
<audio> (src attribute)
<img> (src attribute)
<video> (src attribute)
<object> subresources (when an <object> performs HTTP requests)
即有权读取和修改HTTPS的Page的DOM,这类混合内容可以替换/修改HTTPS页面的对象内容,还可以盗取用户的敏感信息。除了上面的混合显示内容的威胁外,混合脚本内容还给予攻击者即一部触发或利用浏览器的其他漏洞的可能
<script> (src attribute)
<link> (href attribute) (this includes CSS stylesheets)
XMLHttpRequest object requests
<iframe> (src attributes)
All cases in CSS where a url value is used (@font-face, cursor, background-image, etc.)
<object> (data attribute)
在混合脚本内容中,攻击者可以利用中间人攻击截获通过HTTP非加密链接请求的内容,修改应答内容,插入恶意脚本,从而盗取用户关键信息,
在用户电脑上安装恶意软件,比如通过利用用户电脑上插件的漏洞
混合内容的威胁决定于用户访问的Site的类型和Site提供数据的方式,比如有的Site允许一切用户公开数据可见,有的Site则通过加密连接提供个人数据,
即使Site没有提供任何敏感数据,中间人攻击者依然可以通过重定向HTTP的请求地址到其他Sites的Pages,来获取用户在该Sites的cookie信息
//FF18增加了混合内容拦截的补丁,FF23默认拦截SSL链接中的来自非加密站点的Web活动内容,火狐之前一直不拦截混合内容主要是考虑到很多网站依然依赖混合内容
//这里的活动内容类似与NS的定义,参考:NS-非HTTPS活动内容拦截、ABE规则-动作/Actions:Sangbox、NS-Web活动内容拦截、
如上所述,Firefox和IE都视框架为活动内容,而Chrome视为非活动内容(Chrome显然处于兼容性考虑,但仍然对框架进行沙盒隔离保护);一般的划分Web内容的前提/分类准则是Web内容是否会影响页面的DOM,而是否把框架视为活动内容处理是比较有争议的且有窍门的,虽然框架内容不会影响包含它的HTTPS页面的DOM,但是恶意框架内容却可以改变其顶级Page,或攻击者通过MITM该框架并注入一个登录表格骗取用户敏感信息;由于框架存在点击劫持等天然漏洞,比较难以处理,建议一定要用NS拦截之!Bug 826599专门讨论是否取消HTTPS中的框架中包含混合内容的情况下的“禁止在此页面的MCB保护”的UI;参考NoScript:框架与混合框架拦截,
由插件发起的请求叫做子请求,因为不是由浏览器发起的,所以在没有第三方插件开发商协助的情况下,浏览器很难决定是否将其发起的HTTP子请求视为活动还是非活动内容,为了避免破坏插件正常使用以及频繁警告,Firefox和Chrome将所有插件子请求都视为非活动内容,这其中包含本该拦截的潜在的活动内容。解决该特例的负影响的策略的讨论Bug,
//参考NS:ABE模块:HTTP类型:INC(OBJSUB),
user_pref("security.mixed_content.block_active_content",true); |
//拦截来自非加密服务器的活动内容?FF23+默认true; |
user_pref("security.mixed_content.block_display_content",false); |
//拦截来自非加密服务器的非活动内容?FF23仍为默认false //过早强制拦截非活动内容会迫使网站对视频、图片等较大的内容进行加密传输,这对于带宽较小的用户的加载和缓存会造成较大的延迟,而CSS、JS等活动内容往往只有几KB大小,加密解密速度很快,对于用户的延迟影响很小, |
user_pref("security.warn_viewing_mixed",true);//当Page中包含混合内容时通知用户?
//下面安全警告是关于混合内容的,默认不存在,
user_pref("security.warn_entering_secure",true);//通知用户将要从非安全网站进入安全网站?
user_pref("security.warn_entering_weak",true);//通知用户将要从安全网站进入非安全网站?
user_pref("security.warn_leaving_secure",true);//通知用户将要离开安全网站?
user_pref("security.warn_submit_insecure",true);//通知用户将要发送表单至非安全网站?
user_pref("security.warn_viewing_mixed",true);//当Page中包含混合内容时通知用户?
//警告的状态,这5个参数决定上面5种警告提示栏的状态,
//默认都不存在,即上面的情况发生时就用下面对应的参数显示一次提示,单用户确认了之后就取消这个临时性参数
//默认true,即显示了提示栏,但用户没有点击确认
//security. warn_viewing_mixed. show_once
//security. warn_submit_insecure. show_once
//security. warn_leaving_secure. show_once
//security. warn_entering_weak. show_once
//security. warn_entering_secure. show_once