这两天开发一个app遇到了上传文件的安全问题,在这里记录下来,弥补自己只有鱼的记忆的缺陷,也希望有人能够提供更好的思路去解决文件上传的安全问题.
下面这个类是文件上传的公共方法,ToolUtils判断的是文件的类型(jpg/png等),这样的做法根本不能避免上传的文件不是木马.下面引入两种方式,调用时候只需要引用一种即可.
private String executeUpload(String uploadDir,MultipartFile file) throws Exception {
// 文件后缀名
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
// 判断后缀名是否合法
String suffixs = suffix.substring(1, suffix.length());
boolean isImage = ToolUtils.isImage(suffixs);
if(!isImage) {
logger.error("the transfer file is not a image!");
throw new FileException("上传非法文件!");
}
// 上传文件名
String fileName = UUID.randomUUID() + suffix;
InputStream inputStream = file.getInputStream();
// 第二种,判断文件是否含有木马(读取流)
// boolean flag = FileUtil.isFile(inputStream);