Java Path Resolve nio resolvePath(final Path baseDirPath, final Path userPath)

Here you can find the source of resolvePath(final Path baseDirPath, final Path userPath)

Description

Resolves an untrusted user-specified path against the API's base directory.

License

Open Source License

Parameter

Parameter Description
baseDirPath the absolute path of the base directory that all user-specified paths should be within.
userPath the untrusted path provided by the API user, expected to be relative to baseDirPath

Declaration

public static Path resolvePath(final Path baseDirPath, final Path userPath) 

Method Source Code


//package com.java2s;
/*//w  ww.j av a2s .co  m
 * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * WSO2 Inc. licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import java.nio.file.Path;

public class Main {
    /**
     * Resolves an untrusted user-specified path against the API's base directory.
     * Paths that try to escape the base directory are rejected.
     *
     * @param baseDirPath the absolute path of the base directory that all user-specified paths should be within.
     * @param userPath    the untrusted path provided by the API user, expected to be relative to {@code baseDirPath}
     */
    public static Path resolvePath(final Path baseDirPath, final Path userPath) {
        final Path resolvedPath = baseDirPath.resolve(userPath).normalize();
        if (!baseDirPath.isAbsolute()) {
            throw new IllegalArgumentException("Base path must be absolute");
        }
        if (userPath.isAbsolute()) {
            throw new IllegalArgumentException("User path must be relative");
        }
        if (!resolvedPath.startsWith(baseDirPath)) {
            throw new IllegalArgumentException("User path escapes the base path");
        }
        return resolvedPath;
    }
}

Related

  1. resolve(Path target, Collection paths)
  2. resolve(Path workingDir, List paths, String file)
  3. resolveBagUri(final Path baseDir, final URI bagUri)
  4. resolveForSymbolic(final Path path)
  5. resolveMaxStep(String rootPath)
  6. resolvePathElements(final Path path)
  7. resolveSymLink(Path link)