第二章 浏览器安全

288 阅读3分钟

2.1 同源策略

浏览器的同源策略(Same Origin Policy)限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性。同源策略保证来自不同源的对象无法相互干扰,避免浏览器页面行为混乱。

JavaScript同源情况举例:

URL Outcome Reason
store.company.com/dir2/other.… Success
store.company.com/dir/another… Success
store.company.com/secure.html Failure Different protocol
store.company.com:81/secure.html Failure Different port
news.company.com/secure.html Failure Different host

由上表可看出,影响“源”的因素包括: 域名host、子域名、端口port、协议protocol

Notice: 对于当前页面来说,页面存放的JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么

<script src=http://b.com/b.js></script>

a.com通过以上代码加载了b.com上的b.js,但是b.js是运行在a.com页面中,因此对于当前打开的a.com来说,b.js的Origin就是a.com。

在浏览器中,<script><img><iframe>等标签都可以跨域加载资源,而不受同源策略的限制。

W3C制定了XMLHttpRequest跨域访问标准。它需要通过目标域返回的HTTP请求头来授权是否允许跨域访问。对于浏览器来说,DOM、Cookie、XMLHttpRequest会受到同源策略的限制,还有一些第三方插件例如Flash、Google Gears等也有各自的同源策略。

2.2 浏览器沙箱

浏览器沙箱(Sandbox)是浏览器多进程架构中将浏览器各个功能模块分开的一种隔离。产生背景是由于浏览器为了应对“挂马”问题,将单进程变为多进程。

Sandbox的设计目的是为了让不可信的代码运行在一定的环境内,限制不可信的代码访问隔离区之外的资源。

Chrome 浏览器是第一个采用多进程架构的浏览器。 Chrome 浏览器包含浏览器进程、渲染进程、插件进程以及扩展进程。插件进程,比如 flash、java 等进程会与浏览器进程严格隔离。

渲染进程被沙箱(Sandbox)隔离,网页 web 代码内容必须通过 IPC 通道才能与浏览器内核进程通信,通信过程会进行安全的检查。

多进程相比于单进程,在发生崩溃时,多进程浏览器只会崩溃当前页面,而单进程浏览器则会崩溃整个浏览器进程。

2.3 恶意网址拦截

恶意网址拦截的原理一般都是通过浏览器周期性的从服务器端获取一份最新的恶意网站黑名单,对于用户访问的网址进行一个验证,判断是否属于此黑名单网址。

常见恶意网址分类:

  • 挂马网站:通常包含恶意的脚本如JavaScript或Flash,通过浏览器漏洞执行shellcode,植入木马
  • 钓鱼网站:通过模仿其他知名网站的相似页面来欺骗用户

目前防御手段:

  • PhishTank免费提供恶意网址黑名单,且频繁更新
  • Google公开其内部的SafeBrowsing API
  • 主流浏览器支持EV SSL证书,增强对安全网站的识别

2.4 浏览器安全的发展

  • 微软在IE 8中推出了XSS Filter功能,对抗反射型XSS(跨站脚本攻击):当用户访问的URL中包含了XSS攻击的脚本时,IE会修改其中的关键字符使攻击无法完成,并弹出提示框
  • Firefox推出CSP(内容安全策略):有服务器返回一个HTTP头,并在其中描述页面应遵循的安全策略,由于XSS攻击在没有第三方插件的帮助下,无法控制HTTP头,所以这项措施是可行的

2.5 小结

浏览器的安全是以同源策略为基础的,加深理解同源策略,才能把握浏览器安全的本质。