一个白屏事件背后的相关浏览器安全策略

3,439 阅读3分钟

背景

事情是这样的,某天下午业务方反馈在使用我们的平台的时候出现了白屏现象,无法正常的加载页面.

大概的现象是这样的: 在系统A中使用iframe加载了系统B;B页面在某个用户电脑上无法正常加载。

定位:查看该用户的电脑,发现是有报错,主要是一个Mixed Content报错

The page at https://xxx.xxx.com was loaded over HTTPS but request an insecure resource http://xxx.xxx.com. This request has been blocked. The content must be served over HTTPS

就是一个常见的mixed content错误提示。

按理说这个地方有一张图片,但是并没有。 、 大概就是这样的一个问题,最后定位原因是B页面接入了SSO登录;但是是使用http协议接入的;这样的话用户在登录失效的状态下打开B页面的时候,会先跳转到SSO页面,但是因为A页面是HTTPS协议,SSO页面是HTTP协议,这样就会触发Mixed Content报错.

因此本文就简单记录一下mixed content的相关知识。

混合内容 Mixed Content

初始的入口html页面使用HTTPS加载,但是页面内嵌的资源(js、css、iframe、图片、视频等)使用http加载,称之为混合内容

现代浏览器会针对该种情况显示警告,或者直接阻止资源加载。

混合内容类型与相关威胁

被动混合内容

不与页面其他内容交互的资源,比如:图片、视频;

相关威胁性相对较小,攻击者可操作有限

主动混合内容

需要与页面其他内容交互的资源,比如: 可执行的js脚本、css、iframe、flash资源等

相关威胁性比较大,因为攻击者可以借此对页面做任何操作

mixed content是来处理同页面资源使用不同协议版本的情况的;相关的也是用来控制不同协议情况的还有一个策略: HSTS。

HSTS

HTTP Strict Transport Security: HTTP严格传输安全

强制客户端使用HTTPS与服务器通信,

实现原理: 客户端在第一次使用https与服务器通信中,服务器在响应头中增加Strict-Transport-Security字段, 举个例子:

example.com网站的响应头上设置如下:

Strict-Transport-Security: max-age=31536000; includeSubDomains

这意味着:

  1. 在接下来的一年里,浏览器向目标网站及其子域名发起网络请求的时候,必须使用https;
  2. 如果在规定时期内服务器证书失效,用户不能无视浏览器的报警继续访问

HSTS VS Mixed Conetent

HSTS 与 Mixed Conetent是相互没有关联的两个设定

服务器激活了HSTS,浏览器会在使用http访问目标服务器的时候强制转换成https,并且这种行为是在首次交互之后服务器激活了HSTS之后开始的,后续凡是与目标服务器的任何资源请求(xhr、静态资源等)都会触发

Mixed Conetent,是高级浏览器内置的安全策略,与其他设置无关;并且有根据威胁等级,做出【仅warning】,或者是【block资源】等不同的操作;针对的是页面中加载的所有第三方资源。(一般情况下,会block js脚本、iframe等;针对img只会warnig提示)

并且,==mixed conten的block操作是发生在HSTS之前的==。

意味着,如果在一个HTTPS的页面中使用HTTP协议打开一个ifame页面,那么直接会被mixed content阻塞报错导致iframe页面无法打开,不会到达HSTS的协议转换这一步。

参考资料

HSTS&Mixed Content