← 返回列表

golang 路径校验方法


// 校验输入路径的合法性
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
	}
}