标签:javascript document 用户登录 浏览器 读书笔记
声明:
读书笔记是我在阅读过程中做的一些笔记,并在其中添加自己的思考。文章中会涉及到部分书籍原文内容,如有侵权,请联系告知并删除。
原文一切版权归本书作者所有,其他思考痕迹保留所有权。
========================================
第2章 浏览器安全
2.1 同源策略
同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。
浏览器的同源策略,限制了来之不同源的“document”或脚本,对当前“document”读取或设置某些属性。
举个例子:比如一个恶意网站的页面通过iframe嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。——引用其他内容
从一个域上加载的脚本不允许访问另外一个域的文档属性。——引用其他内容
影响“源”的因素有:host(域名或IP地址)、子域名、端口、协议
需要注意的是,对于当前页面,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript页面所在的域是什么。
例如:a.com通过代码<script src=http://b.com/b.js></script>加载b.com上的b.js,但b.js是运行在a.com页面中的,因此对于挡墙打开的页面(a.com页面)来说,b.js的Origin是a.com而非b.com。
在浏览器中,<script>、<img>、<iframe>、<link>等标签都可以跨域加载资源,而不受同源策略的限制。这些带“src”属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。
XMLHttpRequest受同源策略限制,但W3C制定了XMLHttpRequest跨域访问标准,通过目标域返回的HTTP头来授权是否允许跨域访问。具体在“HTML 5 安全”一章中继续探讨。
DOM、Cookie、XMLHttpRequest受到同源策略的限制外,浏览器的加载的一些第三方插件也有各自同源策略。常见的一些插件如Flash、Java Applet、Silverlight、Google Gears等都有自己的控制策略。
以Flash为例,它主要通过目标网站提供的crossdomain.xml文件判断是否允许当前“源”的Flash跨域访问目标资源。
以www.qq.com的策略文件为例,当浏览器在任意其他域的页面加载了Flash后,如果对www.qq.com发起访问请求,Flash会先检查www.qq.com上此策略是否存在。如果文件存在,则检查发起请求的域是否在许可范围内。代码如下:
www.qq.com/crossdomain.xml
<cross-domain-policy>
<allow-access-from domain="*.qq.com"/>
<allow-access-from domain="*.gtimg.com"/>
</cross-domain-policy>
在Flash9及以后的版本,还实现了MIME检查以确认crossdomain.xml是否合法,也会检查crossdomain.xml是否在根目录下。
---------------------------------------------------
IE8 CSS跨域实例:
www.a.com/test.html
<body>
{}body{font-family:
aaaaaaa
bbbbbbbbb
</body>
www.b.com/test2.html
<body>
<style>
@import url("http://www.a.com/test.html");
</style>
<script>
setTimeout(function(){
var t = document.body.currentStyle.fontFamily;
alert(t);
},2000);
</script>
在www.b.com/test2.html中通过@import加载了www.a.com/test.html为CSS文件,渲染进入当前页面的DOM,同时通过document.body.currentStyle.fontfamily访问此内容。问题发生在IE的CSS Parse的过程中,IE将fontFamily后面的内容当做了value,从而可以读取www.a.com/test.html页面的内容。
------------------------------------------------------------
读后感:
从上述例子来看,同源策略限制了对非同源的文件、脚本的访问。是否可以这样理解,如果没有同源策略,一个页面的恶意脚本可以通过任意访问任意域的内容,在对某个域访问(如Gmail)的时候,可以带着浏览器已经存在的数据(如Cookie)去访问目标域,并通过脚本文件读取目标域的内容,于是用户的信息便被恶意脚本获取了。
2.2 浏览器沙箱
在网页中插入一段恶意代码,利用浏览器漏洞执行任意代码的攻击方式,在黑客圈子被形象称为“挂马”。“挂马”是浏览器需要面对的一个主要威胁。
Sandbox即沙箱,泛指“资源隔离类模块”的代名词。Sandbox的设计目的一般是为了让不可信任的代码运行在一定的环境中,限制不可信任的代码访问隔离区之外的资源。如果一定要跨越Sandbox边界产生数据交换,则只能通过指定的数据通道,比如经过封装的API来完成,在这些API会严格检查请求的合法性。
浏览器采用sandbox技术,无疑可以让不受信任的网页代码、javascript代码运行在一个受限制的环境中,从而保护本地桌面系统的安全。
浏览器安全是一个整体,在现今的浏览器中,虽然有多进程架构和sandbox的保护,但是浏览器所加载的一些第三方插件往往不受sandbox管辖。
2.3 恶意网址拦截
在很多时候,“挂马”攻击在实施时会在一个正常的网页中通过<script><iframe>等标签加载一个恶意网址。为了保护用户安全,浏览器厂商推出拦截恶意网址功能。目前各个浏览器的拦截恶意网址的功能都是基于“黑名单”的。
常见的恶意网址分两类
1. 挂马网站:包含恶意脚本如javascript或flash,通过浏览器的漏洞(包括一些插件、控件的漏洞)执行shellcode,在用户电脑中植入木马;
2. 钓鱼网站,通过模仿知名网站的相似页面来欺骗用户。
PhishTank是互联网上免费提供恶意网址黑名单的组织之一。
SafeBrowsing API :Google公开了其内部使用的
EV SSL 证书:是全球数字证书颁发机构与浏览器厂商一起打造的增强型证书,其主要特色是浏览器会给予EVSSL证书特殊待遇。EVSSL也遵循X509标准,并向前兼容普通证书。
2.4 高速发展的浏览器安全
IE8=>XSS Filter : 对抗反射型XSS
当用户访问的URL中包含了XSS攻击的脚本时,IE就会修改其中的关键字符使其攻击无法成功完成,并对用户弹出提示框。
Firefox4=>Content Security Policy(CSP)
由服务器返回一个HTTP头,并在其中描述页面应该遵守的安全策略。
由于XSS攻击在没有第三方插件帮助的情况下,无法控制HTTP头,所有是有效的。
这种自定义的语法必须由浏览器支持并实现,Firefox是第一个支持此标准的浏览器。
例子如下:插入一个HTTP返回头:
X-Content-Securlty-Policy: policy
其中policy描述极为灵活,比如
X-Content-Securlty-Policy: allowe ‘self‘ ; *.mydomain.com ; img-src * ;
浏览器信任来自mydomain.com及其子域下的内容。
浏览器对畸形URL人性化处理,有可能会被黑客利用,绕过一些安全软件或安全模块。
浏览器加载的插件也是浏览器安全需要考虑的一个问题。扩展和插件的权限都高于页面的javascript的权限,比如可以进行一些跨域网络请求等。
标签:javascript document 用户登录 浏览器 读书笔记
原文地址:http://dijxx0.blog.51cto.com/10127150/1680744