我需要使用我的Java - Spring Web应用程序上传文件。
在上传文件时,我需要检查要上传的文件类型。根据我的要求,我需要允许上传压缩文件。
要处理安全问题,如果我有恶意文件类型列表,则应该对可执行文件或不需要的文件类型筛选zip文件。
请建议我如何使用java来了解zip文件的内容类型。
答案 0 :(得分:0)
我建议尝试以下方法:
答案 1 :(得分:0)
您主要担心的是,zip文件是否包含.exe个文件。为此,您可以搜索zip文件的内容以读取文件名;从文件名中可以找到哪个文件是.exe文件。
public static void printFileList(String filePath){
FileInputStream fis = null;
ZipInputStream zipIs = null;
ZipEntry zEntry = null;
try {
fis = new FileInputStream(filePath);
zipIs = new ZipInputStream(new BufferedInputStream(fis));
while((zEntry = zipIs.getNextEntry()) != null){
System.out.println(zEntry.getName());
}
zipIs.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
<强>输入强>
C:\\Users\\Desktop\\New.zip
输出
New/contactsManager
New/log.txt
New/timesheet.PNG
从输出文件名中可以找到.exe文件。
答案 2 :(得分:0)
在其他任何事情之前,您需要重写该文件。 Zip文件“令人惊讶”。阅读内容,检查,写出新的档案。这并不罕见,并进一步重写所包含的文件(例如,网站通常会重写用户上传图像)。
您应注意目录遍历攻击和拒绝服务(zip炸弹)的其他事项。
通常你应该列入白名单,而不是黑名单。可能你想检查文件扩展名(并且可能检查没有更多的点)和幻数(通常是前四个字节)同意。 UNIX命令魔法的实现可能对您有所帮助。
有一些特点。例如,zip文件本身可以从后面读取(参见GIFAR)。有些程序会忽略无效输入并跳过它能理解的东西。可能一个目标程序会做一个额外的解缠层,比如一个枪口。