网站地图    收藏   

主页 > 后端 > 网站安全 >

第三方Flash组件带来的安全问题 - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 13:03 作者: 阅读:

[导读] 大家知道,在不支持以Ajax方式发送二进制数据流的浏览器中,要实现带进度的文件上传功能,一般需要借助Flash了(通过type=file表单上传,加上JS定期向服务器轮询也可以得到进度,不过...

大家知道,在不支持以Ajax方式发送二进制数据流的浏览器中,要实现带进度的文件上传功能,一般需要借助Flash了(通过type=file表单上传,加上JS定期向服务器轮询也可以得到进度,不过不在本文讨论范围。同样,ActiveX等方案也不在这里讨论)。除了显示进度,Flash还能批量添加文件,限制文件大小、类型。到现在,Flash实现的文件上传在国内仍然算得上主流方案。

但是,几个月前,几个常用的第三方Flash上传组件纷纷被爆出XSS和CSRF漏洞(不知道什么是XSS/CRSF,以及它们危害的同学请自行搜索)。问题产生的原因主要有两类:

一类是Flash里通过ExternalInterface.call执行JS时,使用了HTML中通过queryString传递过来的变量,并且没对参数进行检查或过滤,由此引发XSS。我知道有此问题的组件包括:SwfUploadV2.2/V2.5,UploadifyV2.1.4。

另外一类是Flash代码里通过Security.allowDomain('*'),破坏了Flash原本的沙箱安全。使得第三方借助这个swf文件获取token等敏感信息成为可能,从而引发CRSF攻击。我知道有此问题的组件有:PluploadV1.5.3。

如果你在项目中使用上述版本的Flash上传组件,建议尽快采取措施排除风险。对于Uploadify和Plupload来说,官方一直都有更新,推荐直接去官方更新到最新版。对于SwfUpload,官方源已经有2年没动静,应该是已经处于无人维护的状态。如果坚持要用它,建议下载源码进行修改。简单说下修改方法(以V2.2为例,V2.5类似):安装FlashDevelop,打开源码中SWFUpload v2.2.0.1 Core/Flash路径下的SWFUpload v2.as3proj项目文件,修改SWFUpload.as并重新编译:

this.movieName = root.loaderInfo.parameters.movieName; 
//修改为:
this.movieName = root.loaderInfo.parameters.movieName.replace(/[^\w\.-]/g, '');

修改完后,可以用如下格式的参数验证漏洞是否堵上: www.2cto.com

www.example.com/swfupload.swf?movieName=%22])}catch(e)
{if(!window.x){alert(1);window.x=1}}try{([%22

另外,由于上面提到的Flash上传组件被广泛使用,所以大家日常使用的开源web项目也需要排查下,并及时升级。例如,著名的wordpress前不久发布的新版就解决了这类问题;国内开源Web编辑器KindEditor新版使用的SWFUpload则依旧存在问题。

(本图不惜泄露我的隐私,留作纪念:))

参考:https://nealpoole.com/blog/2012/05/xss-and-csrf-via-swf-applets-swfupload-plupload/



作者:JerryQu

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论