Skip to content

Commit dd757e3

Browse files
author
heavyrian2012
committed
解决上传文件的漏洞
1 parent 47b3eea commit dd757e3

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

config/application.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ wfc.audio.cache.dir=/data/wfc/audio/cache
5151
# 详情请参考 https://www.baidu.com/s?wd=cookie+SameSite&ie=utf-8
5252
wfc.all_client_support_ssl=false
5353

54-
## 是否添加用户默认密码。当使用组织架构服务导入员工信息后,员工无法直接登录。可以开启此配置,使用手机号码的后六位作为初始密码。首次登录之后必须修改密码。其他情况不用打开此开关。
54+
## 是否添加用户默认密码。可以开启此配置,使用手机号码的后六位作为初始密码。首次登录之后必须修改密码。其他情况不用打开此开关。
5555
## 用户设置密码时,不能设置为手机号码的后6位
5656
wfc.default_user_password=false
5757

src/main/java/cn/wildfirechat/app/ServiceImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,7 +1065,7 @@ public RestResult putGroupAnnouncement(GroupAnnouncementPojo request) {
10651065

10661066
@Override
10671067
public RestResult saveUserLogs(String userId, MultipartFile file) {
1068-
File localFile = new File(userLogPath, userId + "_" + file.getOriginalFilename());
1068+
File localFile = new File(userLogPath, userId + "_" + Utils.getSafeFileName(file.getOriginalFilename()));
10691069

10701070
try {
10711071
file.transferTo(localFile);
@@ -1198,7 +1198,7 @@ public RestResult uploadMedia(int mediaType, MultipartFile file) {
11981198
Subject subject = SecurityUtils.getSubject();
11991199
String userId = (String) subject.getSession().getAttribute("userId");
12001200
String uuid = new ShortUUIDGenerator().getUserName(userId);
1201-
String fileName = userId + "-" + System.currentTimeMillis() + "-" + uuid + "-" + file.getOriginalFilename();
1201+
String fileName = userId + "-" + System.currentTimeMillis() + "-" + uuid + "-" + Utils.getSafeFileName(file.getOriginalFilename());
12021202
File localFile = new File(ossTempPath, fileName);
12031203

12041204
try {

src/main/java/cn/wildfirechat/app/tools/Utils.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package cn.wildfirechat.app.tools;
22

3+
import java.nio.file.Paths;
34
import java.util.Random;
5+
import java.util.UUID;
46
import java.util.regex.Matcher;
57
import java.util.regex.Pattern;
68

@@ -24,4 +26,28 @@ public static boolean isMobile(String mobile) {
2426
return flag;
2527
}
2628

29+
public static String getSafeFileName(String fileName) {
30+
if (fileName == null || fileName.isEmpty()) {
31+
return UUID.randomUUID().toString();
32+
}
33+
34+
// 使用 Paths.get 解析文件名
35+
try {
36+
String newName = Paths.get(fileName).getFileName().toString();
37+
if(!newName.isEmpty()) {
38+
return newName;
39+
}
40+
} catch (Exception e) {
41+
// 处理解析异常
42+
e.printStackTrace();
43+
}
44+
return UUID.randomUUID().toString();
45+
}
46+
47+
public static void main(String[] args) {
48+
String filename1 = "/aa../../../hello.txt";
49+
String filename2 = "..\\..\\1.txt";
50+
System.out.println(getSafeFileName(filename1));
51+
System.out.println(getSafeFileName(filename2));
52+
}
2753
}

0 commit comments

Comments
 (0)