资源描述
第三方Flash组件带来的平安问题脚本平安 电脑资料
大家知道,在不支持以Ajax方式发送二进制数据流的浏览器中,要实现带进度的文件上传功能,一般需要借助Flash了(通过type=file表单上传,加上JS定期向效劳器轮询也可以得到进度,不过不在本文讨论范围,
但是,几个月前,几个常用的第三方Flash上传组件纷纷被爆出XSS和CSRF漏洞(不知道什么是XSS/CSRF,以及它们危害的同学请自行搜索)。问题产生的原因主要有两类:
一类是Flash里通过ExternalInterface.call执行JS时,使用了HTML中通过queryString传递过来的变量,并且没对参数进行检查或过滤,由此引发XSS。我知道有此问题的组件包括:SwfUpload V2.2/V2.5,Uploadify V2.1.4。
另外一类是Flash代码里通过Security.allowDomain('*'),破坏了Flash原本的沙箱平安。使得第三方借助这个swf文件获取token等敏感信息成为可能,从而引发CSRF攻击。我知道有此问题的组件有:Plupload V1.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, '');
修改完后,可以用如下格式的参数验证漏洞是否堵上:
.example./swfupload.swf?movieName=%22])}catch(e){if(!window.x){alert(1);window.x=1}}try{([%22
另外,由于上面提到的Flash上传组件被广泛使用,所以大家日常使用的开源web工程也需要排查下,并及时升级,
(本图不惜泄露我的隐私,留作纪念:))
参考:s://nealpoole./blog/xx/05/xss-and-csrf-via-swf-applets-swfupload-plupload/
本文链接:.imququ./post/securityprobleminflashuploader.html
模板,内容仅供参考
展开阅读全文