对于浏览器的同源策略你是怎样理解的呢?

作者:王泥煤
链接:https://www.zhihu.com/question/25427931/answer/30848852
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.什么是同源策略
同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。
2.为什么说同源策略限制了人类文明的发展
安全性和方便性是成反比的,十位数的密码提高了安全性,但是不方便记忆。同样,同源策略提升了Web前端的安全性,但牺牲了Web拓展上的灵活性。设想若把html、js、css、flash,image等文件全部布置在一台服务器上,小网站这样凑活还行,大中网站如果这样做服务器根本受不了的,可用性都不能保证的话,安全性还算个吊?
所以,现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”。
例如img script style等标签,都允许垮域引用资源,严格说这都是不符合同源要求的。然而,你也只能是引用这些资源而已,并不能读取这些资源的内容,不信你可以试试:在你自己的域内读取百度logo图片的内容,以读取到二进制数据为准。
你很快发现这是不可能的,你顶多只能判断这张图片是否存在(使用的img标签的onerror属性 )。因此浏览器降低了那么一点点安全性,却大大提升网站布置的灵活性。
尽管浏览器开放了“后门”,然而现代文明却仍不满足。打破同源策略的方法有很多,抛开漏洞不谈,Server端的大数据整合和浏览器的插件往往就充当着这样一个角色。我有一个同事,由于在淘宝上买过一个自慰器,从此不管他打开哪个网站都会有自慰器的广告投递,弄得人家好尴尬。我手把手教他清除Cookie,发现者根本不奏效。(吐槽:我们使用的是一个公网IP,后来我吃惊的发现我的电脑中也出现了自慰器的广告).好吧,这样的例子还有很多。虽然,攻城狮们越来越肆无忌惮的浪,然而浏览器们依旧保持着他那份应有的节操(国产浏览器除外)。
3.如果没有同源策略,普通用户将无密可保。
尽管浏览器遵循同源策略,你仍可以发现你的访问过的网站、买过的东西、搜索过的字串、甚至你的兴趣爱好,都可以被远端分析出来。我们姑且认为这些大数据分析者是有节操的,不会随意泄露这些数据。如果浏览器不遵循同源策略,那么情况更糟:网站站长、广告联盟、流量统计商、xss黑客,随便哪个人都将无障碍的获取私密信息,例如各个网站的Cookie、email的邮件内容、OA页面的内容、QQ空间里设置为隐私的照片等,不止这些,听说过CSRF吗,这里不做科普,通过CSRF还可能用你的邮箱群发发邮件、在OA里面填上你旷工一天、在第三方支付平台里自由转账、用你的账号在知乎上胡乱发言降低你的big,等等。
感谢同源策略,我才有勇气使用互联网。
4.跨域漏洞
尽管各个浏览器都遵循都远策略,可是通过一些奇淫巧计会绕过同源的限制进行跨域。举个例子UC浏览器跨本地域XSS可盗取任意域Cookie ,一段js代码本来是普通http域的权限,可是用过下载页面的一个xss,从而具有了file域的权限,而file域对权限限制也不严格,允许从file域跨到任意一个http域权限去执行js代码,经过了两次跨域操作,最终实现了普通http域向任意一个域注射js的目的,同源策略被完全破坏。
4.最严重的跨域——跨特权域
所有跨域行为中最严重的莫过于跨特权域。在客户端中,有一些域的权限比较高,例如file://这个协议域,ie中允许调用ActiveX执行cmd,Webkit中可以读取磁盘上的文件。另外还有客户端自定义的特权域,例如Chrome的chrome://downloads/域,有着执行exe的权限。这事儿太严重了,这不仅意味着任意一个网站都可以浏览/修改你的浏览器配置,而且可以不经你同意上传文件,甚至会在你的电脑上安装木马。跨特权域最经典的例子莫过于黑哥去年讲的 《跨过的那些客户端》。

讲到这里题主应该理解了吧。

同源策略是浏览器最核心也最基本的安全功能

首先:web是开放的世界, 需要互联链接. 你的网站, 可以使用别人的图片, img,
使用别人 script 做统计, 做广告联盟

假设没有同源, 互联网世界是什么样?

  • 链接跳转导致的问题.

http://a.com , 放一个链接到 icbc.com, 然后 window.open来打开, 获取窗口句柄, 然后可以拥有对这个页面完全的控制权. 拦截表单,捕获数据,将账号密码上传到a.com.

  • ajax请求, 要啥就有啥.

你登录jd.com; 然后打开a.com, 通过ajax 请求http://jd.com 的用户信息接口, 这时候因为访问的jd.com,所以浏览器自动带上了jd的cookie,然后获取到你的订单list ,昵称, 所有私密信息.

所以,需要要同源策略

在同一个域内,客户端脚本可以任意读写同源内的资源,dom,cookie;但是不同的域,就不行.

链接:https://www.zhihu.com/question/25427931/answer/55286639

时间: 2024-11-05 04:37:19

对于浏览器的同源策略你是怎样理解的呢?的相关文章

浏览器的同源策略和跨域问题

要理解跨域问题,必须得知道什么是同源策略. 什么是同源策略? 何谓同源:        URL由协议.域名.端口和路径组成. 如果两个URL的协议.域名和端口相同,则表示他们同源.同源策略:        浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性.         从一个域上加载的脚本不允许访问另外一个域的文档属性. 举个例子:        比如一个恶意网站的页面通过iframe嵌入了银行的登录页

浏览器的同源策略

同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现.浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性. 同源策略,它是由Netscape提出的一个著名的安全策略. 现在所有支持JavaScript 的浏览器都会使用这个策略. 所谓同源是

浏览器的同源策略和跨域访问

1. 什么是同源策略 理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略.    何谓同源:        URL由协议.域名.端口和路径组成,如果两个URL的协议.域名和端口相同,则表示他们同源.    同源策略:        浏览器的同源策略,限制了来自不同源的"document"或脚本,对当前"document"读取或设置某些属性.        从一个域上加载的脚本不允许访问另外一个域的文档属性. 举个例子:      

浏览器的同源策略与跨域处理

一.  同源策略 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 下表给出了相对http://store.company.com/dir/page.html同源检测的示例: 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互. 允许跨源访问的一些例子: <script src="..."></script> 标签嵌入跨域脚本.语法错误信息只能在同源脚本中捕捉到. <link rel="style

浏览器的同源策略和CORS跨域

浏览器的同源策略和CORS跨域 什么是同源: 域名/ip + 端口 + 协议 http协议默认端口:80 https协议默认端口:443 浏览器对于非同源的请求会拒绝接受响应信息. 前后端分离的项目一般都会涉及到跨域问题 JSONP跨域(之前的解决方案) 不足: 只能GET请求 前端和后端都要支持 原理: 利用的就是浏览器对加载静态资源不做限制,比如 <script src="跨域的地址"></script> jQuery版JSONP $.getJSON(&qu

ajax请求总是不成功?浏览器的同源策略和跨域问题详解

场景 码农小明要做一个展示业务数据的大屏给老板看,里面包含了来自自己网站的数据和来自隔壁老王的数据.那么自己网站的数据提供了 http://xiaoming.com/whoami 这样的数据接口隔壁老王提供了 http://oldwang.com/isdad 这样的数据接口单独点开都是没有问题的.但是一使用 js 的 ajax 请求就无法收到来自 oldwang.com 的数据了.点开浏览器控制台一看,红字标出(Chrome): XMLHttpRequest cannot load http:/

浏览器的同源策略及跨域解决方案

同源策略 一个源的定义 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源. 举个例子: 下表给出了相对http://a.xyz.com/dir/page.html同源检测的示例: URL 结果 原因 http://a.xyz.com/dir2/other.html 成功   http://a.xyz.com/dir/inner/another.html 成功   https://a.xyz.com/secure.html 失败 不同协议 ( https和http ) h

同源策略——浏览器安全卫士

对于软件开发人员来说,理解同源策略.能够非常好地攻克了一个痛点. 不同域名下的资源读写 ! 古代的楚河汉界明白地规定了两方的活动界限.假设没有这些界限,天下必将大乱.相同,在我们的浏览器,也有着一些界限和策略,才让 Web 世界之所以能如此美好地呈如今我们面前.这些安全策略有效地保障了用户计算机的本地安全与Web安全. 同源策略 浏览器有一个非常重要的概念--同源策略(Same-Origin Policy).所谓同源是指,域名,协议.port同样.不同源的client脚(javascript.A

禁用浏览器同源策略的方法

前后联调的时候总会涉及到跨域,平时我们跨域主要的方法是通过cors进行跨域,但是通过cors进行跨域有的时候会涉及到数据安全的问题,这时候我们可以通过禁用本地浏览器的同源策略来进行跨域的联调 ie的禁用同源策略设置,进入ie的网际网路选项设置,然后选择安全性,再选择自订等级,然后下拉,找到「存取跨网络的资料来源」,选择启用即可. chrome的话可以通过在命令行,输入「chrome --disable-web-security」,它会自己再新开启一个实例,开启chrome的时候显示一系列黄色的文