HTML5安全风险详析之一:CORS攻击

摘要:
简而言之,CORS旨在使AJAX能够实现可控的跨域访问。有关详细信息,请参阅我的文章“HTML5安全:CORS简介”。检查服务器日志表明受害者执行了攻击,因为除了来自Referrer的HTTP头之外,通常没有其他日志记录。
CORS-CrossOrigin Resources Sharing,也即跨源资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。

一、从SOP到CORS

SOP就是Same Origin Policy同源策略,指一个域的文档或脚本,不能获取或修改另一个域的文档的属性。也就是Ajax不能跨域访问,我们之前的Web资源访问的根本策略都是建立在SOP上的。它导致很多web开发者很痛苦,后来搞出很多跨域方案,比如JSONP和flash socket。如下图所示:

图片

后来出现了CORS-CrossOrigin Resources Sharing,也即跨源资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。具体可以参见我的这篇文章《HTML5安全:CORS(跨域资源共享)简介》。示意如下图所示:

图片

现在W3C的官方文档目前还是工作草案,但是正在朝着W3C推荐的方向前进。不过目前许多现代浏览器都提供了对它的支持。

服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。例如:

Access–Control-Allow-Origin: http://blog.csdn.net

应用CORS的系统目前包括Face.com、GoogleCloudStorage API等,主要是为开放平台向第三方提供访问的能力。

二、CORS带来的风险

CORS非常有用,可以共享许多内容,不过这里存在风险。因为它完全是一个盲目的协议,只是通过HTTP头来控制。

它的风险包括:

1、HTTP头只能说明请求来自一个特定的域,但是并不能保证这个事实。因为HTTP头可以被伪造。

所以未经身份验证的跨域请求应该永远不会被信任。如果一些重要的功能需要暴露或者返回敏感信息,应该需要验证Session ID。

2、第三方有可能被入侵

举一个场景,FriendFeed通过跨域请求访问Twitter,FriendFeed请求tweets、提交tweets并且执行一些用户操作,Twitter提供响应。两者都互相相信对方,所以FriendFeed并不验证获取数据的有效性,Twitter也针对Twitter开放了大部分的功能。

但是当如果Twitter被入侵后:

FriendFeed总是从Twitter获取数据,没有经过编码或者验证就在页面上显示这些信息。但是Twitter被入侵后,这些数据就可能是有害的。

或者FriendFeed被入侵时:

Twitter响应FriendFeed的请求,例如发表Tweets、更换用户名甚至删除账户。当FriendFeed被入侵后,攻击者可以利用这些请求来篡改用户数据。

所以对于请求方来说验证接收的数据有效性和服务方仅暴露最少最必须的功能是非常重要的。

3、恶意跨域请求

即便页面只允许来自某个信任网站的请求,但是它也会收到大量来自其他域的跨域请求。.这些请求有时可能会被用于执行应用层面的DDOS攻击,并不应该被应用来处理。

例如,考虑一个搜索页面。当通过'%'参数请求时搜索服务器会返回所有的记录,这可能是一个计算繁重的要求。要击垮这个网站,攻击者可以利用XSS漏洞将Javascript脚本注入某个公共论坛中,当用户访问这个论坛时,使用它的浏览器重复执行这个到服务器的搜索请求。或者即使不采用跨域请求,使用一个目标地址包含请求参数的图像元素也可以达到同样的目的。如果可能的话,攻击者甚至可以创建一个WebWorker执行这种攻击。这会消耗服务器大量的资源。

有效的解决办法是通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等。

4、内部信息泄漏

假定一个内部站点开启了CORS,如果内部网络的用户访问了恶意网站,恶意网站可以通过COR(跨域请求)来获取到内部站点的内容。

5、针对用户的攻击

上面都是针对服务器的攻击,风险5则针对用户。比方说,攻击者已经确定了你可以全域访问的productsearch.php页面上存在SQL注入漏洞。 攻击者并不是直接从它们的系统数据库中获取数据,他们可能会编写一个JavaScript数据采集脚本,并在自己的网站或者存在XSS问题的网站上插入这段脚本。当受害者访问含有这种恶意JavaScript脚本的网站时,它的浏览器将执行针对“productsearch.php”的SQL注入攻击,采集所有的数据并发送给攻击者。检查服务器日志显示是受害人执行了攻击,因为除了来自Referrer的HTTP头一般没有其他日志记录。受害者并不能说他的系统被攻破,因为没有任何任何恶意软件或系统泄漏的痕迹。

三、攻击工具

Shell of the Future是一个反向WebShell处理器,它利用HTML5的跨站请求来劫持会话

图片

四、防御之道

1、不信任未经身份验证的跨域请求,应该首先验证Session ID或者Cookie。

2、对于请求方来说验证接收的数据有效性,服务方仅暴露最少最必须的功能。

3、通过多种条件屏蔽掉非法的请求,例如HTTP头、参数等。

免责声明:文章转载自《HTML5安全风险详析之一:CORS攻击》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇关于XML的技术详情----XML定义 用途 工作原理及未来透传模块是什么 为何透传下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTML5表单之input 类型- Date Pickers(日期选择器)

HTML5 拥有多个可供选取日期和时间的新输入类型: date:选取日、月、年 month:选取月、年 week:选取周和年 time:选取时间(小时和分钟) datetime-local:选取时间、日、月、年(本地时间) datetime:选取时间、日、月、年(在有些浏览器内失效,选用datetime-local) 例1:date <input...

跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享

  在我们日常的项目开发时使用AJAX,传统的Ajax请求只能获取在同一个域名下面的资源,但是HTML5打破了这个限制,允许Ajax发起跨域的请求。浏览器是可以发起跨域请求的,比如你可以外链一个外域的图片或者脚本。但是Javascript脚本是不能获取这些资源的内容的,它只能被浏览器执行或渲染。主要原因还是出于安全考虑,浏览器会限制脚本中发起的跨站请求。(...

分享一个基于HTML5实现的视频播放器【转】

什么是hivideo?     最近一段时间在使用PhoneGap开发一个App应用,App需要播放视频,本想直接使用html5的video,但使用它在全屏播放时不支持横屏播放,只能放弃。最终决定还是自己封装一个播放器算了,免得以后要扩展功能麻烦。     最近迷上hi这个单词,所以我给这个播放器取名叫做:hivideo。     hivideo是一款基于...

HTML5 文件处理之FileAPI简介整理

  在众多HTML5规范中,有一部分规范是跟文件处理有关的,在早期的浏览器技术中,处理小量字符串是js最擅长的处理之一。但文件处理,尤其是二进制文件处理,一直是个空白。在一些情况下,我们不得不通过Flash/ActiveX/NP插件或云端的服务器处理较为复杂或底层的数据。今天,HTML5的一系列新规范正在致力于让浏览器具备更强大的文件处理能力。 今天要介绍...

25 个超棒的 HTML5 &amp;amp; JavaScript 游戏引擎开发库

  就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议。游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实、吸引人眼球。游戏引擎负责其余的事情。早期,游戏开发者通常从草图做起,花费高昂,且不容易获利。为了让游戏开发更加简单容易,主要的开发者开始授权他们的基本游戏引擎,如 Unreal。而且,随着手机和平板游戏的出现,所需预算比以前更少,对 JAV...

spring could 微服务 跨域问题(CORS )

问题发现 正常情况下,跨域是这样的:1. 微服务配置跨域+zuul不配置=有跨域问题2. 微服务配置+zuul配置=有跨域问题3. 微服务不配置+zuul不配置=有跨域问题4. 微服务不配置+zuul配置=ok 然而云环境中每个服务自己有跨域解决方案,而网关需要做最外层的跨域解决方案.如果服务已有跨域配置网关也有,会出现*多次配置问题。 Access-Co...