前段时间测试人员报了一个flash的xss bug,经分析用了Loader.loadBytes且没做数据流格式校验的程序都会中招,自测方法只需一行代码:

ExternalInterface.call('alert', ‘msg from flash’);

编译后把后缀名改为jpg或png等图片格式,去新浪微博主站选择第一种图片上传方式……

虽然用户一般不会上传来历不明的图片,但是本着好奇心还是搞了一下怎么防止。用Flash的FileReference的type判断文件格式很原始,真的只是从文件的后缀名判断的,所以改了后缀很明显会有问题……

解决方法只能是读取数据流里面真实的格式数据了。用winHex看了一下各种图片的文件流,文件头的不定长度(24位至64位二进制数据)的数据是标识文件格式的数据块。所以用ByteArray读取这部分数据即可判断文件格式。由于需要鉴定的图片格式是固定的几种,所以只取前面24位二进制数据即可判断这几种格式。

代码:

var file: FileReference = new FileReference();
var fileFilter:FileFilter = new FileFilter('图片文件:(*.jpg, *.jpeg, *.gif, *.png, *.bmp)','*.jpg; *.jpeg; *.gif; *.png; *.bmp');
stage.addEventListener(MouseEvent.CLICK, function(evt: MouseEvent) {
file.browse([fileFilter]);
});
file.addEventListener(Event.SELECT, function(evt: Event) {
file.addEventListener(Event.COMPLETE, onLoadCpl);
file.load();
});
function onLoadCpl(evt: Event): void {
file.removeEventListener(Event.COMPLETE, onLoadCpl);
var byteArray:ByteArray = evt.target.data as ByteArray;
var fileTypeHex: String = byteArray.readUnsignedByte().toString(16) + byteArray.readUnsignedByte().toString(16) + byteArray.readUnsignedByte().toString(16);
trace(fileTypeHex);
if(fileTypeHex == ‘ffd8ff’ || fileTypeHex == ‘89504e’ || fileTypeHex == ‘474946’ || fileTypeHex == ‘424de8’) { //分别是jpg&jpeg、png、gif、bmp的hex
loadByte(byteArray);
} else {
trace(‘文件格式不正确’);
}
}
function loadByte(byteArray: ByteArray): void {
var loader: Loader = new Loader();
//loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e: Event) {});//加载图片
loader.loadBytes(byteArray);
}

对比一下用winHex读取的文件数据:

jpg&jpeg:

png:

gif:

bmp:

完全一致,大功告成~

==================================================

作者:hotcho

出处:http://www.cnblogs.com/cos2004/p/3198244.html

==================================================

flash从数据流判断图片格式防止xss攻击的更多相关文章

  1. ZH奶酪:PHP判断图片格式的7种方法

    以图片 $imgurl = "http://www.php10086.com/wp-content/themes/inove/img/readers.gif"; 为例: 思路1. ...

  2. 用Delphi从内存流中判断图片格式[转]

    http://blog.163.com/tfn2008%40yeah/blog/static/110321319201222243214337/ 用Delphi从内存流中判断图片格式[转] 2012- ...

  3. PHP判断图片格式的七种方法小结

    <?php $imgurl = "http://www.jb51.net/images/logo.gif"; //方法1 echo $ext = strrchr($imgur ...

  4. java中判断图片格式并且等比例压缩图片

    最近项目中需要判断上传的图片必须是png,jpg,gif三种格式的图片,并且当图片的宽度大于600px时,压缩图片至600px,并且等比例的压缩图片的高度. 具体的实现形式: 大致的思路是: 判断根据 ...

  5. Struts2图片文件上传,判断图片格式和图片大小

    1. 配置Struts2能够上传的最大文件大小 使用Struts2进行文件上传的时候,Struts2默认文件大小最大为2MB,如果要传大一点的文件,就需要修改struts.xml配置文件,重新设置能够 ...

  6. java 代码判断图片格式后缀名称

    /** * 图片判断 */ private static String getFormatName(Object o) { try { // Create an image input stream ...

  7. Delphi从内存流中判断图片格式(好多相关文章)

    废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样)BMP文件  ...

  8. 用Delphi从内存流中判断图片格式

    https://blog.csdn.net/my98800/article/details/53536774 废话不多说了,利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件 ...

  9. php 判断图片类型

    脚本之家 <?php $imgurl = "http://www.jb51.net/images/logo.gif"; //方法1 echo $ext = strrchr($ ...

随机推荐

  1. python网络编程--线程event

    一:线程event作用 Python提供了Event对象用于线程间通信,它是线程设置的信号标志,如果信号标志位真,则其他线程等待直到信号结束. Event对象实现了简单的线程通信机制,它提供了设置信号 ...

  2. 使用html+css+js实现3D相册

    使用html+css+js实现3D相册,快来上传的照片吧 效果图: 代码如下,复制即可用: <!DOCTYPE html> <html lang="en"> ...

  3. Spring框架的基本使用(AOP部分)

    AOP,Aspect Oriented Programming,意为面向切面编程,是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术.AOP采取横向抽取机制,取代了传统纵向继承体系重复 ...

  4. ZOJ 3962 Seven Segment Display(数位DP)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3962 题目大意: 有t组数据. 给你一个n,和8位的十六进制数s ...

  5. Centos之其他帮助命令

    选项帮助 命令 -help 获取命令选项的帮助 例如 ls --help 我们会发现用这种方式查看帮助命令 居然还有中文解释: 详细命令帮助info info 命令 -回车:进入子帮助页面(带有*号标 ...

  6. 记录一次webpackJsonp is not defined

    始末: 领导让将最近部署的一部分更改隐藏掉,so,我先不存当前分支内容,创建新分支,在新分支里回滚到上一版本,进行更改操作,一切都么问题,本地vue项目与python项目都运行不报错,但在部署后,报错 ...

  7. Jenkins的授权和访问控制

    默认的Jenkins不包含任何的安全检查,任何人可以修改Jenkins设置,job和启动build等.显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题. 在系统管理 ...

  8. Spark(十二)SparkSQL简单使用

    一.SparkSQL的进化之路 1.0以前:   Shark 1.1.x开始:SparkSQL(只是测试性的)  SQL 1.3.x:          SparkSQL(正式版本)+Datafram ...

  9. USACO 4.3 Street Race

    Street RaceIOI'95 Figure 1 gives an example of a course for a street race. You see some points, labe ...

  10. 阿里云ali-oss图片增加水印

    先附上文档连接 : https://helpcdn.aliyun.com/document_detail/44957.html 水印文字或图片必须经过一下转化 URL安全的Base64位编码 在图片处 ...