请选择 进入手机版 | 继续访问电脑版

默认
回复 0

191

主题

197

帖子

615

积分

高级会员

Rank: 4

积分
615
QQ
文件上传漏洞分析[复制链接]
发表于 2018-7-3 06:57:10 | 显示全部楼层 |阅读模式

很多网站都提供了文件上传功能,用以用户来分享自己的东西。但是,这也给网站带来很大的安全隐患,如果网站管理人员或者开发人员不注意的话,将使网站处于非常危险的状态。

常见的不安全因素主要有以下两方面:

  • 对上传文件大小不做限制
    我们一般在需要上传文件的网站上,都可以看到对上传文件的大小的限制,如不能超过多少KB或多少MB,这样做的目的主要有以下两个方面考虑:

    • 大文件的上传会大量占用服务器宝贵的网络资源,大大降低系统吞吐量

    • 大文件浪费系统存储资源,既占用大量磁盘空间,同时在存取时也将极大消耗系统磁盘I/O


  • 对上传文件类型不做限制

    • 上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行

    • 上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似)

    • 上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行

    • 上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。



下面就说说预防漏洞的方法:

1.根据业务具体情况,相应的限制用户上传文件的大小

一方面,我们可以在前端限制用户上传文件的大小:

下面是JS获取文件大小的方法:

<INPUT TYPE="file" NAME="file" SIZE="30" onchange="getFileSize(this.value)"><script type="text/javascript">function getFileSize(filePath){      var fso = new ActiveXObject("Scripting.FileSystemObject");      alert("文件大小为:"+fso.GetFile(filePath).size);}</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

当然,前端的限制只是起一个提醒作用,后端的校验当然是必不可少的,而且真正起作用的是后端。

由于后端所使用的语言不同,上传方式不同,从而判断方法不同,我使用的是servlet自带的文件上传组建,对文件大小设置是这样的:

@MultipartConfig(maxFileSize = 1024 * 1024 * 5) //5MB//判断文件是否超过设置的大小if(config.maxRequestSize() == -1L || config.maxFileSize() == -1L) {    System.out.println("上传文件过大!");}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.根据业务情况,限制用户上传文件的类型

在windows下,一般是通过后缀名来判断文件的类型的,但是我们也深知这种方式是非常不靠谱的,因为我们可以轻松的将一个后缀名改成另一个后缀名。但是许多文件都有这样的规律,在文件的开头几个字节是固定的,通过这几个字节,我们基本可以确定文件类型,我们将这几个字符称之为魔数。关于魔数,请猛戳这里

在Linux下,我们可以使用hexedit命令来以16进制查看文件内容

PNG文件:

PNG文件魔数为:89504E47

PDF文件:

PDF文件魔数为:255044462D312E

下面是常见文件的魔数:

JPEG (jpg)  文件:FFD8FF PNG  (png)  文件:89504E47 GIF  (gif)  文件:47494638 TIFF (tif)  文件:49492A00Wave (wav)  文件:57415645 AVI  (avi)  文件:41564920XML  (xml)  文件:3C3F786D6C HTML (html) 文件:68746D6C3E ZIP  (zip)  文件:504B0304 RAR  (rar)  文件:52617221 Windows Bitmap (bmp) 文件:424D  MS Word/Excel (.xls or .doc) 文件:D0CF11E0 Adobe Acrobat (pdf) 文件:255044462D312E
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

因此我们可以通过辨别文件头部的几个字节来判断文件类型,这样就能比较准确的判断文件类型,从而严格控制文件上传,防止上传恶意文件。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQArchiver 手机版 小黑屋  

免责声明:网站所有帖子,内容均为网友提供,不代表本社区立场! , Processed in 0.205381 second(s), 35 queries .

Powered by Discuz! X3.2

Copyright © 2015 ~ 2018 maishell交易网 保留所有权利!

返回顶部