0%

HTTPS Mixed content

HTTPS Mixed content

起因还是最近把博客迁到国内,往常用的Chrome,看自己的Gitpage是有小锁的,心血来潮用Edge试了试自己新注册域名的https,结果居然和我说不安全?让学长用Safari帮忙试了下也显示不安全,就很气,然后进行了一通学习
毕竟Chrome作为”世界上最安全的浏览器”,别人报不安全他报安全就应该是很离谱的事情

Mixed Content

查看成因,Edge的警告是证书没问题但是图片可能存在诱骗,后来发现是拉自己QQ头像的那个链接写的是HTTP,而这种在HTTPS中引入HTTP资源的情况就被称为Mixed Content
这显然可能引发奇怪的安全问题,如果在HTTPS中引入了HTTP内容,结果这个HTTP内容被中间人攻击或者DNS污染之类的控制了就很致命,在这样的界面上如果还报安全,那就害人了

Chrome对https的提升

但是Chrome还能对这种情况上一把小锁,就必然是存在对应操作的——也就是所谓的HTTPS upgrade
Chrome在80版本后会尝试对在HTTPS中请求的HTTP资源进行一次提升,以HTTPS的请求方式去请求这个资源,如果HTTPS请求资源失败就封禁这个资源(原文写的是the source will be blocked),在81版本后会对图片进行同样的处理,确保了HTTPS请求下的资源全都是HTTPS方式加载的,这样就能保证HTTPS下的安全了,真是太牛逼了
不过资源不支持HTTPS就直接加载不到是不是也有点武断
f12打开Chrome和edge的控制台查看网络请求,确实我头像的请求方式分别是HTTPS和HTTP(腾讯还是有点靠谱的,头像请求API都支持HTTPS,所以之前一直没有发现这种问题)

而Safari和Edge则会直接使用HTTP请求去加载对应资源,然后不显示HTTPS的安全小锁,是不是突然感觉Chrome的确变得安全了一点?

passive/display content&active content

Mixed Content分如上两类,mixed passive/display content即为img,video这类的静态资源,就只能展示给用户,如果能被加载顶多就是诱骗用户,或者是中间人攻击可以看哪些图片被请求了,有些图片只会出现在特定页面,从而了解用户正在访问什么页面,经典侧信道攻击,总体而言危害比较低,并且感觉这个侧信道攻击如果真的有中间人的话,HTTPS请求同样会被中间人收到,似乎并不能防范
mixed active content就是iframe,js,css,fetch请求这些能操作DOM树的玩意,危害正无穷,不用我多说了吧
在Chrome中字体和web workers也被认为是mixed active content
Chrome 火狐之类的在加载localhost的文件时无视Mixed content规则
详解MDN
https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content

参考链接

https://www.ghacks.net/2020/04/02/chrome-81-mixed-content-images-will-be-upgraded-or-blocked/

Mixed content测试站点
https://www.bennish.net/mixed-content.html
这个站里面一万个HTTP加载的数据,Chrome在图片不能被HTTPS upgrade的HTTPS站点也会把小锁变成不安全的感叹号,如果能成功upgrade就还是小锁
从HTTPS向HTTP提交表单是被允许的,但是加载都不太行了,音频、脚本、视频、图片、CSS什么的都不行,然后控制台里报一万个Mixed Content的错误和警告
Edge和Chrome在这个站点的表现区别就是Edge能加载HTTP的图片,剩下的报Mixed Content错误,也就是Chrome80版本的行为准则
(不过80好像今年初就发行了,Edge不是改用Chrome内核了吗,怎么感觉好像就不太行)