浏览器的同源策略
古代的楚河汉界明确规定了楚汉两军的活动界限,理应遵守,否则必天下大乱,而事实上天下曾大乱后又统一。这里我们不用管这些“分久必合,合久必分”的问题,关键是看到这里规定的“界限”。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前端黑客技术揭秘》
钟晨鸣,徐少培编著
电子工业出版社出版
相关推荐
浏览器同源策略介绍 浏览器同源策略是计算机安全领域中的一种重要机制,旨在阻止恶意代码在不同源之间进行非法操作。同源策略(Same-origin Policy,SOP)是浏览器安全机制中的一部分,用于阻止来自不同源的页面...
在《Collabtive系统浏览器同源策略探索实验》中,你将有机会亲自运行源代码,体验同源策略如何影响跨域通信。源码的分析和实践将帮助你更好地掌握这一概念,同时,设计说明书会提供理论背景和具体步骤,指导你如何...
浏览器同源策略是Web开发中的一项重要安全机制,它防止了不同源之间的文档或脚本相互干扰,以保护用户隐私和安全性。同源策略规定,只有当两个网页的协议、域名和端口号都相同时,这两个网页才属于同一个源,否则...
【同源策略】是Web浏览器实施的一种安全策略,旨在防止恶意脚本从一个域名访问另一个域名的数据。简单来说,它规定同一源(协议、域名和端口)的JavaScript才能访问和修改网页内容,如HTML、CSS和Cookies。然而,...
浏览器同源策略介绍.pptx shodan搜索技巧.pptx Sqlmap通用参数.pptx DTD快速入门.pptx XSS发生的位置.pptx XSS跨站脚本分类.pptx CSRF漏洞防御.pptx 收集敏感信息.pptx Mysql注入有关知识点.pptx 标签属性中的XSS....
标题中的“Allow-Control-Allow-Origin”是指一种用于解决浏览器同源策略限制的技术,它涉及到Web开发中的跨域资源共享(CORS)机制。同源策略是浏览器为了保护用户数据安全而实施的一项安全策略,它禁止不同源的...
**同源策略**是指在[Web浏览器](https://zh.wikipedia.org/wiki/排版引擎)中,允许某个网页[脚本](https://zh.wikipedia.org/wiki/腳本)访问另一个网页的数据,但前提是这两个网页必须有相同的[URI]...
百度地图Lushu.js
DNS重绑定漏洞是一种利用DNS解析机制和浏览器同源策略缺陷的网络攻击技术。这种漏洞最早出现在互联网安全领域,近年来在CTF(Capture The Flag,网络安全竞赛)比赛的Web题目中常见。本文将深入探讨DNS重绑定的概念...
总之,XmlHttpProxy是一个帮助开发者绕过浏览器同源策略限制的工具,它利用了XMLHttpRequest和代理服务的概念。通过学习和使用这个工具,开发者能够更好地理解和实践跨域通信技术,提升Web应用的功能和用户体验。
这是一个Chrome扩展,安装后,它会在Chrome的开发者工具中模拟服务器返回包含"Access-Control-Allow-Origin"头部的响应,使得在调试阶段,前端代码可以不受浏览器同源策略的限制,正常发起跨域请求。 使用方法如下...
狭义的跨域是由浏览器同源策略限制的一类请求场景。 同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能。如果缺少了同源策略,浏览器很容易...
5. 开发者现在可以在Chrome的开发者工具中进行跨域请求,而不会受到浏览器同源策略的限制。 总的来说,“Allow-Control-Allow-Origin.rar”为Chrome开发者提供了一个便捷的工具,帮助他们克服跨域限制,提高开发...
跨域问题是指由于浏览器同源策略的限制,导致不同域之间的资源无法交互的现象。该问题在Web开发中非常常见,不仅会导致开发困难,也会影响用户体验。因此,了解跨域问题的解决方法非常重要。下面总结了跨域问题的...
跨域是指一个源(Origin,包括协议、域名和端口)试图访问另一个源的资源时受到浏览器同源策略的限制。这种策略是为了保护用户数据安全,防止恶意网站窃取或篡改信息。 **为什么会发生跨域问题?** 跨域是由浏览器...
同源策略是浏览器的一个安全功能,用来限制不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意...
对于这些浏览器,可以考虑使用HTML5的`navigator.clipboard.writeText` API,但需考虑到这个API需要用户的权限,并且在某些情况下可能受到浏览器同源策略的限制。 总之,通过ZeroClipboard库,我们可以实现一个兼容...
引入类似浏览器同源策略的细粒度控制机制,打破了应用之间的界限,将粒度细化到代码来源。将控制机制实现到Android系统层,并提供了一套插桩工具对应用进行修改。实验结果表明,系统能够起到允许或禁止特定开发者...
跨域资源分享(Cross-Origin Resource Sharing,简称CORS)是Web开发中解决浏览器同源策略限制的一种机制。同源策略是浏览器内置的安全措施,限制了来自不同源的“脚本”对网页内容的访问,以防止恶意代码窃取数据。...