java有什么方法判断压缩文件解压后的实际大小,防止文件攻击

J2EE 码拜 10年前 (2015-04-03) 3476次浏览 0个评论
 

最近在做一个项目遇到一个问题,每个用户都会上传一个压缩文件,并且给每个用户分配的目录大小只有2G,所以问题是要先知道用户上传的压缩文件大小,解压后是不是超过了2G,超过就不允许上传,在网上搜索了下,也没找到合适的方法,看了一个别人给的案例是使用java自带的java.util.zip实现的,但是校验bz2这种类型的压缩文件大小时候,总是报错:
java.util.zip.ZipException: error in opening zip file,一直没有找到解决方法,所以来论坛问问,请高人指点下

java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
取压缩文件大小不就好了不需要解压保存吧
java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
20分
上传的文件先放到临时目录,解压后不超过2G才认为OK,否则直接删除。
java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
在页面上明确提示【每个用户分配的目录大小只有2G】

在服务器端,用操作系统级别的权限,每个用户分配的目录大小设置为2G以内

java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
给了2G的空间 只要人家没超过2G就可以吧 难道服务器还要把每个压缩文件都解压保存吗 
java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
为什么要帮别人解压?要么直接上传一个未压缩,要么上传一个压缩,我帮你保存着不就完了?
java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
现在是架构师是这么设计的,要求必须先校验压缩文件是否超过了2G,然后才能去解压,
把文件先解压在判断解压后的大小,这个我觉得不是最优的方案,但是做个备选方案,其他兄弟有解决思路吗?
压缩文件里面应该有什么标志位,表示解压后文件是多大的吧
java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
50分
引用 楼主 depositpei 的回复:

最近在做一个项目遇到一个问题,每个用户都会上传一个压缩文件,并且给每个用户分配的目录大小只有2G,所以问题是要先知道用户上传的压缩文件大小,解压后是不是超过了2G,超过就不允许上传,在网上搜索了下,也没找到合适的方法,看了一个别人给的案例是使用java自带的java.util.zip实现的,但是校验bz2这种类型的压缩文件大小时候,总是报错:
java.util.zip.ZipException: error in opening zip file,一直没有找到解决方法,所以来论坛问问,请高人指点下

首先,这种方式不是很好,要是人家zip加密了怎么办,zip本身是不代解压后的信息的(包括文件名和大小)

其次,看你的异常,你把jdk版本发来,有些jdk并不能很好的支持zip,再有把你的代码贴出来,看看你的用法是不是有问题。

java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
引用 7 楼 ooppookid 的回复:
Quote: 引用 楼主 depositpei 的回复:

最近在做一个项目遇到一个问题,每个用户都会上传一个压缩文件,并且给每个用户分配的目录大小只有2G,所以问题是要先知道用户上传的压缩文件大小,解压后是不是超过了2G,超过就不允许上传,在网上搜索了下,也没找到合适的方法,看了一个别人给的案例是使用java自带的java.util.zip实现的,但是校验bz2这种类型的压缩文件大小时候,总是报错:
java.util.zip.ZipException: error in opening zip file,一直没有找到解决方法,所以来论坛问问,请高人指点下

首先,这种方式不是很好,要是人家zip加密了怎么办,zip本身是不代解压后的信息的(包括文件名和大小)

其次,看你的异常,你把jdk版本发来,有些jdk并不能很好的支持zip,再有把你的代码贴出来,看看你的用法是不是有问题。

另外,你用的什么中间件,印象中zip的工具再中间件里的某些包也有,出现冲突以后也会报异常(包括版本)

java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
30分
小哥,人家那是bz2,跟zip揍是两个格式,java.util.zip根本不支持。java2s.com上的代码只能打开zip文件。楼主这个问题,只能去试试Apache Commons Compress: http://commons.apache.org/proper/commons-compress/

或者干脆限制bz2上传!

引用 8 楼 ooppookid 的回复:
Quote: 引用 7 楼 ooppookid 的回复:
Quote: 引用 楼主 depositpei 的回复:

最近在做一个项目遇到一个问题,每个用户都会上传一个压缩文件,并且给每个用户分配的目录大小只有2G,所以问题是要先知道用户上传的压缩文件大小,解压后是不是超过了2G,超过就不允许上传,在网上搜索了下,也没找到合适的方法,看了一个别人给的案例是使用java自带的java.util.zip实现的,但是校验bz2这种类型的压缩文件大小时候,总是报错:
java.util.zip.ZipException: error in opening zip file,一直没有找到解决方法,所以来论坛问问,请高人指点下

首先,这种方式不是很好,要是人家zip加密了怎么办,zip本身是不代解压后的信息的(包括文件名和大小)

其次,看你的异常,你把jdk版本发来,有些jdk并不能很好的支持zip,再有把你的代码贴出来,看看你的用法是不是有问题。

另外,你用的什么中间件,印象中zip的工具再中间件里的某些包也有,出现冲突以后也会报异常(包括版本)

java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
多谢各位,找到了一种解决方法,就是边解压边判断文件大小,超过了2G就不在继续解压,同时删除已经解压出来的文件,网上找的一段代码,测试了支持bz2格式的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java有什么方法判断压缩文件解压后的实际大小,防止文件攻击
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!