// 校验输入路径的合法性
func DefaultValidateAbsFolderPath(fl validator.FieldLevel) bool {
path := fl.Field().String()
// 检查路径是否为空
if path == "" {
return false
}
// 检查路径是否以 / 开头
if !filepath.IsAbs(path) {
return false
}
// 使用正则表达式验证路径是否合法(支持中文字符)
// 允许的字符:字母、数字、下划线、点号、连字符,以及 Unicode 字符(如中文)
// 同时允许单独的 /
validPathRegex := regexp.MustCompile(`^\/($|([\p{L}\p{N}._\-]+\/?)+)$`)
if is := validPathRegex.MatchString(path); !is {
return false
}
// 2. 物理清理路径,消除 .. 和多余的 /
cleanPath := filepath.Clean(input)
// 3. (核心) 检查清理后的路径是否仍然在你的预期根目录之内
if !strings.HasPrefix(cleanPath, path) {
return false
}
}