浏览器安全
绝大多数互联网用户使用联网的工具是浏览器,随着浏览器版本的不断更新,浏览器的安全功能也变得越来越重要,总结了一下主要的浏览器安全功能。
一.同源策略
同源策略是一种约定,它是浏览器最核心的也是最基本的安全功能,很多时候浏览器的实现的同源策略是隐形的,透明的,浏览器的同源策略,限制了来之不同源的“document”或者脚本,对当前“document”读取或者设置某些属性,阻止浏览器的页面行为发生混乱。
影响“源”的因素有:域名,子域名,端口,协议。对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。例如,a.com通过以下代码:
<script src=http://b.com/b.js></script>
加载了b.com上的b.js文件,但是b.js文件是由a.com加载运行的,所以源应该是a.com而不是b.com。
在浏览器中,<script>,<img>,<iframe>,<link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带“src”属性的标签每次加载时,实际上就是由浏览器发起了一次GET请求。不同于XMLHttpResquet的是,通过src属性加载的资源,浏览器限制了JavaScript的权限,让其不能读,写返回的内容。XMLHttpRequest有一套跨域访问的标准,就是通过目标域返回的HTTP头来授权是否允许跨域访问,因为HTTP头对于JavaScript来说一般是无法控制的。
对于浏览器来说,不仅DOM,Cookie,XMLHttpRequest会受到同源策略的限制,浏览器加载的一些第三方插件和扩展也有各自的同源策略,最常见的插件如Flash,Java Applet,Silverlight,Google Gears等都有自己的控制策略。
以Flash为例,它主要通过目标网站提供的crossdomain.xml文件判断是否允许当前“源”的Flash跨域访问目标资源,从“源”的层面控制了Flash行为的安全性。Flash9版本后,还实现了MIME检查以确认crossdomain.xml是否合法,比如查看服务器返回的HTTP头的Content-Type是否是text/*,application/xml,application/xhtml+xml。这样做的原因,是因为攻击者可以通过上传crossdomain.xml文件控制Flash的行为,绕过同源策略。除了MIME检查外,Flash还会检查crossdomain.xml是否在根目录下,也可以使得一些上传文件的攻击失效。
二.浏览器沙箱
沙箱,已经泛指“资源隔离模块”的代名词,沙箱设置的目的就在于为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区外的资源。如果一定要跨越沙箱边界产生数据交换,则只能通过特定的数据通道,比如经过封装的API来完成,在这些API中会严格检查请求的合法性。对于浏览器来说,沙箱技术,可以让不受信任的网页代码,JavaScript代码运行在一个受限制的环境中,从而保证本地桌面系统的安全。
浏览器发展出了多进程架构,每一个页面就是一个进程,发生崩溃的时候,只会崩溃当前的页面进程,不会影响到其他的页面进程,既提高了安全性,又提升了用户体验。但浏览器安全是一个整体,虽有多进程架构和沙箱技术的保护,但是浏览器所加载的一些第三方插件却往往不收沙箱管辖,一些三方插件一方面试自身脆弱,容易被攻击,另一方面是有些三方软件行为就是带有恶意的。
三.恶意网址拦截
常见的恶意网址分为两类:,一类是是“挂马”网站,这些网站通常包含有恶意的脚本,通过利用浏览器的漏洞(包括一些插件和控件漏洞),执行shellcode,在用户电脑中植入木马;另一类就是钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。
针对恶意网址拦截,目前浏览器厂商以推送恶意网址黑名单为主,现在的浏览器多是与专业的安全产商展开合作,由安全产商或机构提供恶意网址黑名单。
四.其他安全措施
IE中有XSSFilter功能,用以对抗XSS。
Firefox中有Content Security Policy。其做法就是有服务器返回一个HTTP头,并在其中描述页面应该遵守的安全策略。使用CSP的用法如下,插入一个HTTP返回头:
X-Content-Security-Policy:policy
其中policy的描述比较灵活,例如:
X-Content-Security-Policy:allow 'self'*.com
浏览器将信任来自mydomain.com及其子域下的内容。
再比如:
X-Content-Security-Policy:allow 'self';img-src*;media-src medial.com; script-src userscripts.example.com
除了信任自身来源之外,还可以加在任意域的图片,来自medial.com的媒体文件,以及userscripts.example.com的脚本,其他的规律一律拒绝。
CSP的设计理念是出色的,就是配置规则在页面较多的时候有点复杂。