Commit be27ba3aa638f7d0cacf8466eba86f93a33244dc

Authored by YunaiV
1 parent 04e59b05

fix(infra): 文件上传时,放宽 directory 校验,可支持类似 XXX/YYY 目录

yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/vo/file/FileUploadReqVO.java
@@ -22,7 +22,14 @@ public class FileUploadReqVO { @@ -22,7 +22,14 @@ public class FileUploadReqVO {
22 @AssertTrue(message = "文件目录不正确") 22 @AssertTrue(message = "文件目录不正确")
23 @JsonIgnore 23 @JsonIgnore
24 public boolean isDirectoryValid() { 24 public boolean isDirectoryValid() {
25 - return !StrUtil.containsAny(directory, "..", "/", "\\"); 25 + return isDirectoryValid(directory);
  26 + }
  27 +
  28 + public static boolean isDirectoryValid(String directory) {
  29 + // 1. 不能包含 .. 防止目录穿越
  30 + // 2. 不能以 / 或 \ 开头,防止上传到根目录
  31 + return !StrUtil.contains(directory, "..")
  32 + && !StrUtil.startWithAny(directory, "/", "\\");
26 } 33 }
27 34
28 } 35 }
yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/app/file/vo/AppFileUploadReqVO.java
1 package cn.iocoder.yudao.module.infra.controller.app.file.vo; 1 package cn.iocoder.yudao.module.infra.controller.app.file.vo;
2 2
3 -import cn.hutool.core.util.StrUtil; 3 +import cn.iocoder.yudao.module.infra.controller.admin.file.vo.file.FileUploadReqVO;
4 import com.fasterxml.jackson.annotation.JsonIgnore; 4 import com.fasterxml.jackson.annotation.JsonIgnore;
5 import io.swagger.v3.oas.annotations.media.Schema; 5 import io.swagger.v3.oas.annotations.media.Schema;
6 import jakarta.validation.constraints.AssertTrue; 6 import jakarta.validation.constraints.AssertTrue;
@@ -22,7 +22,7 @@ public class AppFileUploadReqVO { @@ -22,7 +22,7 @@ public class AppFileUploadReqVO {
22 @AssertTrue(message = "文件目录不正确") 22 @AssertTrue(message = "文件目录不正确")
23 @JsonIgnore 23 @JsonIgnore
24 public boolean isDirectoryValid() { 24 public boolean isDirectoryValid() {
25 - return !StrUtil.containsAny(directory, "..", "/", "\\"); 25 + return FileUploadReqVO.isDirectoryValid(directory);
26 } 26 }
27 27
28 } 28 }