CORS资源共享 (只做资源共享 与csrf不同)
CORS(Cross-Origin Resource Sharing)跨源资源共享,是HTML5的一个新特性,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,它允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服AJAX只能同源使用的限制。
CORS的基本原理是,第三方网站服务器生成访问控制策略,指定用户浏览器放宽 SOP 的限制,实现与指定的目标网站共享数据
用户A在登录自己后台或什么页面,这个时候访问了第三方的页面,第三方页面去请求这个后台或页面的内容,用户A访问了页面即将页面的内容泄露了
Access-Control-Allow-Origin 必填 允许请求的域
Access-Control-Allow-Methods 必填 允许请求的方法
Access-Control-Allow-Headers 可选 预检请求后,告知发送请求需要有的头部
Access-Control-Allow-Credentials 可选 表示是否允许发送cookie,默认false;
Access-Control-Max-Age 可选 本次预检的有效期,单位:秒;
Json hijacking漏洞:
在菜鸟教程中是这样说的,JSONP(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
为什么我们从不同的域(网站)访问数据需要一个特殊的技术( JSONP )呢?这是因为同源策略。
同源策略,它是由 Netscape 提出的一个著名的安全策略,现在所有支持 JavaScript 的浏览器都会使用这个策略,所谓同源是指,域名,协议,端口相同。
原理
大家应该知道,<img>的src(获取图片),<link>的href(获取css),<script>的src(获取javascript)这三个标签都不符合同源策略,它们可以跨域获取数据。JSONP就是通过动态创建<script>标签,指向一个需要访问的地址,利用<script>的src 不受同源策略约束,提供一个回调函数来接收数据来跨域获取数据的
cors漏洞与Json hijacking(jsonp)漏洞对比
1.jsonp是浏览器默认支持的跨域方式,cors是W3C提供的一个跨域标准。
2.jsonp只支持GET方式的跨域,CORS支持GET和POST等其他在服务器配置中允许的方式进行跨域
3.jsonp几乎支持所有的服务器(因为所有浏览器都支持"<script>"标签发生请求),而Cors不支持ie10一下的浏览器
4.jsonp支持的跨域资源需要满足JAVAscript代码规范,而cors跨域加载资源可以是HTML,XML等多种格式
如何防御CORS漏洞
1仅为需要跨域加载的页面开启cors功能
2在开启后尽量使用域名清单,避免用”*“等通配符向所有域名开放
如何防御JSONS漏洞
1对请求的来源镜像检测,包括Referer,Orign等参数,匹配是否来自合法或可信任的域名
2尽量避免在JSONP接口输入用户敏感信息
3将必须要通过跨域读取的内容封装为JSON格式并通过Access-Control-Allow-Origin限制跨域访问的源域名