zoukankan      html  css  js  c++  java
  • 浏览器的同源策略

    浏览器的同源策略

    古代的楚河汉界明确规定了楚汉两军的活动界限,理应遵守,否则必天下大乱,而事实上天下曾大乱后又统一。这里我们不用管这些“分久必合,合久必分”的问题,关键是看到这里规定的“界限”。Web世界之所以能如此美好地呈现在我们面前,多亏了浏览器的功劳,不过浏览器不是一个花瓶——只负责呈现,它还制定了一些安全策略,这些安全策略有效地保障了用户计算机的本地安全与Web安全。

     注:

    计算机的本地与Web是不同的层面,Web世界(通常称为Internet域)运行在浏览器上,而被限制了直接进行本地数据(通常称为本地域)的读写。

    同源策略是众多安全策略的一个,是Web层面上的策略,非常重要,如果少了同源策略,就等于楚汉两军没了楚河汉界,这样天下就大乱了。

    同源策略规定:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。

    下面分析同源策略下的这个规定,其中有几个关键词:不同域、客户端脚本、授权、读写、资源。

    1.不同域或同域

    同域要求两个站点同协议、同域名、同端口,比如:表 1-1 展示了表中所列站点与http://www.foo.com是否同域的情况。

    表1-1  是否同域情况

    站    点

    是否同域

    原    因

    https://www.foo.com

    不同域

    协议不同,https与http是不同的协议

    http://xeyeteam.foo.com

    不同域

    域名不同,xeyeteam子域与www子域不同

    http://foo.com

    不同域

    域名不同,顶级域与www子域不是一个概念

    http://www.foo.com:8080

    不同域

    端口不同,8080与默认的80端口不同

    http://www.foo.com/a/

    同域

    满足同协议、同域名、同端口,只是这里多了一个目录而已

    从表1-1中的对比情况可以看出,我们通常所说的两个站点同域就是指它们同源。

    2.客户端脚本

    客户端脚本主要指JavaScript(各个浏览器原生态支持的脚本语言)、ActionScript(Flash的脚本语言),以及JavaScript与ActionScript都遵循的ECMAScript脚本标准。Flash提供通信接口,使得这两个脚本语言可以很方便地互相通信。客户端的攻击几乎都是基于这两个脚本语言进行的,当然JavaScript是最广泛的。

    被打入“冷宫”的客户端脚本有VBScript,由于该脚本语言相对较孤立,又有当红的JavaScript存在,所以实在是没有继续存在的必要。

    3.授权

    一般情况下,看到这个词,我们往往会想到服务端对客户端访问的授权。客户端也存在授权现象,比如:HTML5新标准中提到关于AJAX跨域访问的情况,默认情况下是不允许跨域访问的,只有目标站点(假如是http://www.foo.com)明确返回HTTP响应头:

    Access-Control-Allow-Origin: http://www.evil.com

    那么www.evil.com站点上的客户端脚本就有权通过AJAX技术对www.foo.com上的数据进行读写操作。这方面的攻防细节很有趣,相关内容在后面会详细介绍。

     注:

    AJAX是Asynchronous JavaScript And XML的缩写,让数据在后台进行异步传输,常见的使用场景有:对网页的局部数据进行更新时,不需要刷新整个网页,以节省带宽资源。AJAX也是黑客进行Web客户端攻击常用的技术,因为这样攻击就可以悄无声息地在浏览器后台进行,做到“杀人无形”。

    4.读写权限

    Web上的资源有很多,有的只有读权限,有的同时拥有读和写的权限。比如:HTTP请求头里的Referer(表示请求来源)只可读,而document.cookie则具备读写权限。这样的区分也是为了安全上的考虑。

    5.资源

    资源是一个很广泛的概念,只要是数据,都可以认为是资源。同源策略里的资源是指Web客户端的资源。一般来说,资源包括:HTTP消息头、整个DOM树、浏览器存储(如:Cookies、Flash Cookies、localStorage等)。客户端安全威胁都是围绕这些资源进行的。

     注:

    DOM全称为Document Object Model,即文档对象模型,就是浏览器将HTML/XML这样的文档抽象成一个树形结构,树上的每个节点都代表HTML/XML中的标签、标签属性或标签内容等。这样抽象出来就大大方便了JavaScript进行读/写操作。Web客户端的攻击几乎都离不开DOM操作。

    到此,已经将同源策略的规定分析清楚,如果Web世界没有同源策略,当你登录Gmail邮箱并打开另一个站点时,这个站点上的JavaScript就可以跨域读取你的Gmail邮箱数据,这样整个Web世界就无隐私可言了。这就是同源策略的重要性,它限制了这些行为。当然,在同一个域内,客户端脚本可以任意读写同源内的资源,前提是这个资源本身是可读可写的。

    本文节选自《web前端黑客技术揭秘》

    钟晨鸣,徐少培编著

    电子工业出版社出版

  • 相关阅读:
    页面打开 抛出w3wp.exe 中发生未处理异常
    link
    带下拉子菜单的导航菜单
    横向列表菜单
    Codeforces Round #640 (Div. 4)
    【剑指Offer】06. 从尾到头打印链表
    【剑指Offer】65. 不用加减乘除做加法
    【剑指Offer】15. 二进制中1的个数
    【剑指Offer】03. 数组中重复的数字(哈希)
    【LeetCode】50. Pow(x, n)(快速幂)
  • 原文地址:https://www.cnblogs.com/broadview/p/2918975.html
Copyright © 2011-2022 走看看