解决Java路径的安全方法

时间:2018-11-02 22:25:23

标签: java path

我尝试针对“根路径”安全地解析外部接收的字符串。 安全地表示,在这种情况下,不可能提供一个导致结果Path指向根目录之外的路径的字符串。可能的符号链接可以忽略。 我目前的想法是:

public static Path safeResolve(Path root, String subname) {
    Path subpath = root.resolve(subname).normalize();
    if(subpath.startsWith(root))
        return subpath;
    return null;
}

只要根已经被规范化,这似乎是安全的。 可以吗?或者有更好/更安全的方法吗?

1 个答案:

答案 0 :(得分:1)

假设root已经规范化,则此解决方案可以正常工作。

尽管您说过可以忽略符号链接,但请注意,使用Files.isSymbolicLink()可以轻松解决此类情况:

public static Path safeResolve(Path root, String subname) {
    Path subpath = root.normalize().resolve(subname).normalize();
    if(subpath.startsWith(root) && !Files.isSymbolicLink(subpath))
        return subpath;
    return null;
}