1、什么是同源策略javascript
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能。它是由Netscape提出的一个著名的安全策略,如今全部的可支持javascript的浏览器都会使用这个策略。能够说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。css
所谓同源是指,域名,协议,端口相同。(URL由协议、域名、端口和路径组成,若是两个URL的协议、域名和端口相同,则表示他们同源。)html
2、为何须要同源策略 前端
假设如今没有同源策略,会发生什么事情呢?你们知道,JavaScript能够作不少东西,好比:读取/修改网页中某个值。恩,你如今打开了浏览器,在一 个tab窗口中打开了银行网站,在另一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问 这个恶意网站而且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会很是严重!而同源策略就为了防止这种事情发生. java
好比说,浏览器的两个tab页中分别打开了http://www.baidu.com/index.html和http: //www.google.com/index.html,其中,JavaScript1和JavaScript3是属于百度的脚本,而 JavaScript2是属于谷歌的脚本,当浏览器的tab1要运行一个脚本时,便会进行同源检查,只有和www.baidu.com同源的脚本才能被执行。因此,tab1只能执行JavaScript1和JavaScript3脚本,而JavaScript2不能 执行,从而防止其余网页对本网页的非法篡改。
若是Web世界没有同源策略,当你登陆京东帐号并打开另外一个站点时,这个站点上的JavaScript能够跨域读取你的京东帐号数据,这样整个Web世界就无隐私可言了。
可是,安全性和方便性是成反比的,十位数的密码提升了安全性,可是不方便记忆。一样,同源策略提高了Web前端的安全性,但牺牲了Web拓展上的灵活性。设想若把html、js、css、flash,image 等文件所有布置在一台服务器上,小网站这样凑活还行,大中网站若是这样作服务器根本受不了的,可用性都不能保证的话,安全性还算什么? 因此,现代浏览器在安全性和可用性之间选择了一个平衡点。在遵循同源策略的基础上,选择性地为同源策略“开放了后门”。 例如img、 script、 style、link、iframe等标签,都容许垮域引用资源,严格说这都是不符合同源要求的。然而,你也只能是引用这些资源而已,并不能读取这些资源的内容。所以浏览器下降了那么一点点安全性,却大大提高网站布置的灵活性。
因此尽管浏览器遵循同源策略,你仍能够发现你的访问过的网站、买过的东西、搜索过的字串、甚至你的兴趣爱好,均可以被远端分析出来。咱们姑且认为这些大数据分析者是有节操的,不会随意泄露这些数据。若是浏览器不遵循同源策略,那么状况更糟:网站站长、广告联盟、流量统计商、xss【注1】 黑客,随便哪一个人都将无障碍的获取私密信息,例如各个网站的Cookie、email的邮件内容、OA页面的内容、QQ空间里设置为隐私的照片等,不止这些,据说过CSRF【注2】吗,经过CSRF还可能用你的邮箱群发发邮件、在OA里面填上你旷工一天、在第三方支付平台里自由转帐、用你的帐号在知乎上胡乱发言,等等。跨域
举个例子UC浏览器跨本地域XSS可盗取任意域Cookie ,一段js代码原本是普通http域的权限,但是用过下载页面的一个xss,从而具备了file域的权限,而file域对权限限制也不严格,容许从file域跨到任意一个http域权限去执行js代码,通过了两次跨域操做,最终实现了普通http域向任意一个域注射js的目的,同源策略被彻底破坏。
【注1】xss 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
【注2】CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,一般缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS很是不一样,而且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击每每不大流行(所以对其进行防范的资源也至关稀少)和难以防范,因此被认为比XSS更具危险性。 浏览器
--观千剑然后识器,操千曲然后晓声安全