首页  :: 新随笔  :: 管理

用魔数防范文件上传攻击

Posted on 2016-01-18 12:43  季枫  阅读(1404)  评论(0编辑  收藏  举报

上传文件功能的安全风险很高,为了防范攻击,最基本的安全工作就是验证文件类型是否为系统允许的

 

简单的通过文件后缀来判断文件类型很不可靠,需要用更安全的方式

 

很多类型的文件,起始几个字节的内容是固定的,所以根据这几个字节的内容就可以确定文件类型,这几个字节被成为魔数

 

用魔数来防范文件上传攻击的原理非常简单,读取上传文件的前28个字节,转为十六进制,与魔数对比,就可以判断此文件是否为允许的文件类型

 

常用文件类型的魔数

 

JPEG - FFD8FF

 

PNG - 89504E47

 

GIF - 47494638

 

BMP - 424D

 

PDF - 255044462D312E

 

ZIP - 504B0304

 

RAR - 52617221

 

WAV - 57415645

 

AVI - 41564920

 

下面是java读取文件头的示例代码

 

byte[] b = new byte[28];

InputStream is = new FileInputStream(file_path);

is.read(b,0,28);

is.close();

String hex = bytes2hex(b);

String fileHead = hex.toUpperCase();

 

此方法可以更为严格的验证文件类型,降低文件上传漏洞风险,但不一定绝对安全,安全要求更高的话,建议使用资源服务器,可以参考 “web安全 - 文件上传漏洞

智读 | 成都会领科技有限公司官网 | 智读App下载 | 每天听本书的博客 | |