diff --git a/pkg/utils/path.go b/pkg/utils/path.go index 1e3a8c4a..f328bd1c 100644 --- a/pkg/utils/path.go +++ b/pkg/utils/path.go @@ -75,7 +75,17 @@ func EncodePath(path string, all ...bool) string { } func JoinBasePath(basePath, reqPath string) (string, error) { - if strings.HasSuffix(reqPath, "..") || strings.Contains(reqPath, "../") { + /** relative path: + * 1. .. + * 2. ../ + * 3. /.. + * 4. /../ + * 5. /a/b/.. + */ + if reqPath == ".." || + strings.HasSuffix(reqPath, "/..") || + strings.HasPrefix(reqPath, "../") || + strings.Contains(reqPath, "/../") { return "", errs.RelativePath } return stdpath.Join(FixAndCleanPath(basePath), FixAndCleanPath(reqPath)), nil