我尝试针对“根路径”安全地解析外部接收的字符串。 安全地表示,在这种情况下,不可能提供一个导致结果Path指向根目录之外的路径的字符串。可能的符号链接可以忽略。 我目前的想法是:
public static Path safeResolve(Path root, String subname) {
Path subpath = root.resolve(subname).normalize();
if(subpath.startsWith(root))
return subpath;
return null;
}
只要根已经被规范化,这似乎是安全的。 可以吗?或者有更好/更安全的方法吗?
答案 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;
}