我有两个让声纳感到难过的问题。具有相对路径遍历问题的代码行中的第一个,如下所示:
File f = new File(MY_DIR + filename);
其中文件名是我从请求中获得的参数。第二行是关于绝对路径遍历问题,除了前面
没有MY_DIR之外,它看起来是一样的。
我在这些行之后添加了验证检查,该方法使用规范路径确保文件位于 MY_DIR 目录中,所以现在看起来像这样:
...
File rootDirFile = new File(MY_DIR);
if (validateFileName(rootDirFile, f)) {
...
private static boolean validateFileName(File targetDir, File fileToCheck) throws IOException {
String targetDirPath = targetDir.getCanonicalPath() + File.separator;
String pathToCheck = fileToCheck.getCanonicalPath();
return pathToCheck.startsWith(targetDirPath);
}
但是声纳仍然说我在这两条线上有一个漏洞。如何告诉它我找到了解决方案?