access-Control-Allow-Origin跨域请求安全隐患
最新的W3C标准里是这么实现HTTP跨域请求的,Cross-Origin Resource Sharing,就是跨域的目标服务器要返回一系列的Headers,通过这些Headers来控制是否同意跨域。
这些Headers有:
- 4 Syntax
- 4.1 Access-Control-Allow-OriginHTTP Response Header
- 4.2 Access-Control-Max-AgeHTTP Response Header
- 4.3 Access-Control-Allow-CredentialsHTTP Response Header
- 4.4 Access-Control-Allow-MethodsHTTP Response Header
- 4.5 Access-Control-Allow-HeadersHTTP Response Header
- 4.6 OriginHTTP Request Header
- 4.7 Access-Control-Request-MethodHTTP Request Header
- 4.8 Access-Control-Request-HeadersHTTP Request Header
 
- 4.1 
在Request 包和 Response 包中都有一些。
其中最敏感的就是 Access-Control-Allow-Origin 这个 Header, 他是W3C标准里用来检查该跨域请求是否可以被通过。 (Access Control Check)
跨域实现的过程大致如:
从 http://www.a.com/test.html 发起一个跨域请求,请求的地址为: http://www.b.com/test.php,如果 服务器B返回一个如下的header
Access-Control-Allow-Origin: http://www.a.com,那么,这个来自 http://www.a.com/test.html 的跨域请求就会被通过。
在这个过程中, request 还会带上这个header:Origin: http://www.a.com

不过这里比较要命的是 Access-Control-Allow-Origin 的值可以是通配符 *
如果是 * 的话,就可以接收来自任意source origin的请求。
我已经可以想象到以后这个特性被程序员滥用以及被用来制作后门的可怕后果了!
在 Firefox 3.1 Beta 2 上抓包如下:
GET http://www.b.com/test.php HTTP/1.1
Host: www.b.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2 Paros/3.2.13
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive
Referer: http://www.a.com/test.html
Origin: http://www.a.com
Cache-Control: max-age=0
HTTP/1.1 200 OK
Date: Thu, 15 Jan 2009 06:28:54 GMT
Server: Apache/2.0.63 (Win32) PHP/5.2.6
X-Powered-By: PHP/5.2.6
Access-Control-Allow-Origin: *
Content-Length: 28
Content-Type: text/html
Cross Domain Request Test!
两段代码大致如下:
www.a.com/test.html:
HTML代码  运行代码  [如果运行无效果,请自行将源代码保存为html文件运行]var client = new XMLHttpRequest();
client.open("GET", "http://www.b.com/test.php");
client.onreadystatechange = function() { }
client.send(null);
</script>
www.b.com/test.php:Cross Domain Request Test!
除了这个Header外,还可以通过一些其他的Header 来控制比如 Method, 时间等,可以参考标准,不在此赘述。
出于安全考虑,跨域请求不能访问document.cookie 对象
对于IE8 Beta 2, 则是通过 XDomainRequest 来实现的这个跨域请求,比如类似如下代码就可以实现了:
JavaScript代码request.open("GET", xdomainurl);
request.send();
也要求对方服务器返回这个头才行。
IE的开发者今天公布了一段小视频:http://ieblog.members.winisp.net/images/XdomainRequest-small.wmv
目前,支持这种跨域实现的要求
Firefox 3.1 Beta2
IE 8 Beta2
等到普及还有一段时间。
最后再加一个Firefox3.1实现跨域的说明文档:
https://developer.mozilla.org/En/HTTP_access_control
access-Control-Allow-Origin跨域请求安全隐患的更多相关文章
- 使用pdf.js实现前端页面预览pdf文档,解决了跨域请求
		pdf.js主要包含两个库文件,一个pdf.js和一个pdf.worker.js,,一个负责API解析,一个负责核心解析 官网地址:http://mozilla.github.io/pdf.js/ 下 ... 
- java、ajax 跨域请求解决方案('Access-Control-Allow-Origin' header is present on the requested resource. Origin '请求源' is therefore not allowed access.)
		1.情景展示 ajax调取java服务器请求报错 报错信息如下: 'Access-Control-Allow-Origin' header is present on the requested ... 
- 跨域请求错误: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
		今天在学习Angular 的HttpInterceptor 拦截器时,发现添加了新的headers键值之后总是报跨域错误.后台使用的是asp.net core. 检查发现,在添加了新的header之后 ... 
- Access control allow origin 简单请求和复杂请求
		原文地址:http://blog.csdn.net/wangjun5159/article/details/49096445 错误信息: XMLHttpRequest cannot load http ... 
- Ajax_05之跨域请求
		1.跨域请求: Cross Domain Request:跨域名的HTTP请求,浏览器从某个域名下的资源访问了另一域名下的另一资源(协议.域名或是端口号不同): ①浏览器允许跨域请求的情形: < ... 
- 基于.Net Framework 4.0 Web API开发(5):ASP.NET Web APIs  AJAX 跨域请求解决办法(CORS实现)
		概述: ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题,特 ... 
- [转]Ajax跨域请求
		一.编一个服务器端servlet @RequestMapping("/haha") @ResponseBody String haha(String haha, HttpServl ... 
- thinkphp 设置跨域请求
		场景:我的本地网页服务器无法访问本地的接口服务器接口提示一下错误:大致意思是:是一个跨域请求我的没有访问该地址的权限(接口服务器采用的是PHP编写) XMLHttpRequest cannot loa ... 
- WebApi Ajax 跨域请求解决方法(CORS实现)
		概述 ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, 特别 ... 
随机推荐
- 黑客讲述渗透Hacking Team全过程(详细解说)
			近期,黑客Phineas Fisher在pastebin.com上讲述了入侵Hacking Team的过程,以下为其讲述的原文情况,文中附带有相关文档.工具及网站的链接,请在安全环境下进行打开,并合理 ... 
- devstack重启后不能运行
			devstack 重启后没有运行服务. 解释: “Note if you reboot your machine running devstack, you need to rerun stack.s ... 
- 【Hadoop】HIVE 小结概览
			一.HIVE概览小结 二.HIVE安装 Hive只在一个节点上安装即可 .上传tar包 .解压 tar -zxvf hive-.tar.gz -C /cloud/ .配置mysql metastore ... 
- ASP.NET小知识
			所有System.Web.UI.*命名空间下的内容可以称为Web From,而System.Web.*命名空间下的其他内容可以称为ASP.NET. @section用法:配合母版页中的@RenderS ... 
- Verify Preorder Serialization of a Binary Tree
			One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null node, ... 
- Eclipse 项目红色叹号:Build Path Problem
			Description Resource Path Location TypeA cycle was detected in the build path of project 'shgl-categ ... 
- Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1
			Codebook model 视频抠像 xp sp3 + vs2005 + OpenCV 2.3.1 源码及详细文档下载 svn checkout http://cvg02.googlecode.co ... 
- struts1老古董配置
			<!--Struts1 struts-config.xml Demo --><?xml version="1.0" encoding="UTF-8&qu ... 
- 神经网络(luogu 1038 答案错误,出题人语体教)
			题目背景 人工神经网络(Artificial Neural Network)是一种新兴的具有自我学习能力的计算系统,在模式识别.函数逼近及贷款风险评估等诸多领域有广泛的应用.对神经网络的研究一直是当今 ... 
- 原始套接字(SOCK_RAW)
			本文转载:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html,在此感谢 原始套接字(SOCK_RAW). 应用原始套接字,我 ... 
