Closed brandonshiyay closed 3 years ago
eladmin/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java
@Override @Transactional(rollbackFor = Exception.class) public Map<String, String> updateAvatar(MultipartFile multipartFile) { User user = userRepository.findByUsername(SecurityUtils.getCurrentUsername()); String oldPath = user.getAvatarPath(); File file = FileUtil.upload(multipartFile, properties.getPath().getAvatar()); user.setAvatarPath(Objects.requireNonNull(file).getPath()); user.setAvatarName(file.getName()); userRepository.save(user); if (StringUtils.isNotBlank(oldPath)) { FileUtil.del(oldPath); } @NotBlank String username = user.getUsername(); flushCache(username); return new HashMap<String, String>(1) {{ put("avatar", file.getName()); }}; }
调用了`eladmin-common/src/main/java/me/zhengjie/utils/FileUtil.java`中的上传函数。 ```java public static File upload(MultipartFile file, String filePath) { Date date = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyyMMddhhmmssS"); String name = getFileNameNoEx(file.getOriginalFilename()); String suffix = getExtensionName(file.getOriginalFilename()); String nowStr = "-" + format.format(date); try { String fileName = name + nowStr + "." + suffix; String path = filePath + fileName; // getCanonicalFile 可解析正确各种路径 File dest = new File(path).getCanonicalFile(); // 检测是否存在目录 if (!dest.getParentFile().exists()) { if (!dest.getParentFile().mkdirs()) { System.out.println("was not successful."); } } // 文件写入 file.transferTo(dest); return dest; } catch (Exception e) { log.error(e.getMessage(), e); } return null; }
由于没有对文件类型和文件名进行查看和过滤,导致登陆的用户可以在系统上上传任意文件。 本身危害性不大,考虑到需要认证,而且文件名会被更改。但是还是建议修复一下。
eladmin/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/UserServiceImpl.java
中的用户更改头像部分由于没有对文件类型和文件名进行查看和过滤,导致登陆的用户可以在系统上上传任意文件。 本身危害性不大,考虑到需要认证,而且文件名会被更改。但是还是建议修复一下。