防御路径遍历攻击的最佳方法是什么?
2022-09-01 01:10:19
我有一个Java服务器实现(如果对你很重要,则为TFTP),我想确保它不容易受到路径遍历攻击,从而允许访问不应该可用的文件和位置。
到目前为止,我最好的辩护尝试是拒绝任何匹配的条目,然后依靠它来解决路径中的任何和组件。最后,我确保生成的路径仍在服务器所需的根目录中:File.isAbsolute()
File.getCanonicalPath()
../
./
public String sanitize(final File dir, final String entry) throws IOException {
if (entry.length() == 0) {
throw new PathTraversalException(entry);
}
if (new File(entry).isAbsolute()) {
throw new PathTraversalException(entry);
}
final String canonicalDirPath = dir.getCanonicalPath() + File.separator;
final String canonicalEntryPath = new File(dir, entry).getCanonicalPath();
if (!canonicalEntryPath.startsWith(canonicalDirPath)) {
throw new PathTraversalException(entry);
}
return canonicalEntryPath.substring(canonicalDirPath.length());
}
这是否会遗漏安全问题?是否有更好/更快的可靠实现相同结果?
代码需要在 Windows 和 Linux 上一致地工作。