循序渐进Python3(十一) --5-- 同源策略
一、什么是同源策略
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能。它是由Netscape提出的一个著名的安全策略,现在所有的可支持javascript的浏览器都会使用这个策略。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
所谓同源是指,域名,协议,端口相同。(URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。)
二、为什么需要同源策略
假设现在没有同源策略,会发生什么事情呢?大家知道,JavaScript可以做很多东西,比如:读取/修改网页中某个值。恩,你现在打开了浏览器,在一 个tab窗口中打开了银行网站,在另外一个tab窗口中打开了一个恶意网站,而那个恶意网站挂了一个的专门修改银行信息的JavaScript,当你访问 这个恶意网站并且执行它JavaScript时,你的银行页面就会被这个JavaScript修改,后果会非常严重!而同源策略就为了防止这种事情发生.
比如说,浏览器的两个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等标签,都允许垮域引用资源,严格说这都是不符合同源要求的。然而,你也只能是引用这些资源而已,并不能读取这些资源的内容。因此浏览器降低了那么一点点安全性,却大大提升网站布置的灵活性。
所以尽管浏览器遵循同源策略,你仍可以发现你的访问过的网站、买过的东西、搜索过的字串、甚至你的兴趣爱好,都可以被远端分析出来。我们姑且认为这些大数据分析者是有节操的,不会随意泄露这些数据。如果浏览器不遵循同源策略,那么情况更糟:网站站长、广告联盟、流量统计商、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更具危险性。
--观千剑而后识器,操千曲而后晓声
循序渐进Python3(十一) --5-- 同源策略的更多相关文章
- 循序渐进Python3(十一) --6-- Ajax 实现跨域请求 jsonp 和 cors
Ajax操作如何实现跨域请求? Ajax (XMLHttpRequest)请求受到同源策略的限制. Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外 ...
- 跨域之同源策略 Same-origin policy
同源策略是浏览器中最基本的隔离潜在恶意文件的安全策略,他限制了来自不同源(origin)的文档或脚本之间的相互作用. 何谓同源 在跨域之URL中介绍过一个URL的标准格式如下: 协议类型://服务器地 ...
- [CORS:跨域资源共享] 同源策略与JSONP
Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分."同源策略"限制了JavaScript的跨站点调用 ...
- Apache2 同源策略解决方案 - 配置 CORS
什么是同源策略 现在的浏览器大多配有同源策略(Same-Origin Policy),具体表现如下: 浏览某一网站,例如 http://www.decembercafe.org/.这个网页中的 Aja ...
- JavaScript——同源策略
概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准.它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载. 这里的同源指的是: ...
- JavaScript 的同源策略
同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就 ...
- ArcGIS Server API for JavaScript调用错误:已阻止跨源请求:同源策略禁止读取位于......
已阻止跨源请求:同源策略禁止读取位于 http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapSe ...
- 同源策略 JSONP(实践篇)
JSONP详解 json相信大家都用的多,jsonp我就一直没有机会用到,但也经常看到,只知道是“用来跨域的”,一直不知道具体是个什么东西.今天总算搞明白了.下面一步步来搞清楚jsonp是个什么玩意. ...
- 同源策略和JSONP(概念性)
同源策略 浏览器有一个很重要的概念——同源策略(Same-Origin Policy). 所谓同源是指,域名,协议,端口相同.不同源的客户端脚本(javascript.ActionScript)在没明 ...
随机推荐
- 集合类 toArray(T[])
HashSet<String> deDupe = new LinkedHashSet<>(Arrays.asList(origParams.getParams(paramNam ...
- string相关总结
一 <string> 1 string类常见成员函数 (1)属性相关 s.empty() s为空时返回true,否则返回false s.size() 返回s中字符的个数,不包 ...
- mac-终端命令
发现一个比较好点的关于mac终端下命令的解释文档,全文粘贴到这,免得丢了(原文在此): Mac终端 命令行 [一]bash 终端设置 1.环境变量设置首先要知道你使用的Mac OS X是什么 ...
- IIS7下ajax报未定义错误
项目之前在iis6环境下运行的很好,今天在WIN7下发布,结果居然报对象未定义错误,经过个把小时折腾,终于弄清楚原委. 在web.config中关于AjaxPro的设置,在IIS7.0(WIN7中使用 ...
- 通过Windows组策略限制证书组织流氓软件的安装运行
https://liwei2.com/2015/11/27/378.html关于如何提取证书,请参阅:https://www.zhihu.com/question/26917038http://www ...
- ubuntu 14.04 配置JavaWeb开发环境
本人初学java web,看到网上的资料层次不齐,故总结一下经验供大家参考 1.首先安装jdk,通常可以从官网上下载安装包安装,也可以直接使用命令安装: (1)到oracle官网上下载相应版本的jdk ...
- jquery 农历日历 可自适应
在网上找了许多大牛做的农历日历,但是不是不符合项目中的要求,就是本身就有问题有Bug ,把大牛门的做日历看了n遍 自己又改造了一遍得到了这个:随后日历又要做个自适应的长宽,又在js中改造代码..... ...
- tomcat7 ajax请求服务中文乱码
在确保请求服务编码格式为utf-8的情况下,确保tomcat的配置 <Connector connectionTimeout="20000" port="8080& ...
- mysql 连接空闲超8小时自动断开连接问题(linux)
在mysql配置文件里添加wait_timeout和interactive_timeout两个值 [mysqld] wait_timeout= interactive_timeout= 超时时间,10 ...
- jsp+tomcat+mysql+sevlet+javabean配置过程
在配置jsp开发环境的过程中会碰到不少问题,感谢网上的许多前辈的经验总结,作者cl41的JSP连接Mysql数据库攻略和作者Saulzy的MySQL学习笔记等文章对我来说简直是雪中送碳,为了帮助象我一 ...