0

我有两个让声纳感到难过的问题。具有相对路径遍历问题的代码行中的第一个,如下所示:

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);
}

但是声纳仍然说我在这两条线上有一个漏洞。如何告诉它我找到了解决方案?

4

2 回答 2

2

米特芬德尔是对的。您唯一的选择是将问题标记为“无法修复”,或者如果在您的平台版本中不可用,则标记为“误报”。

这些安全规则没有“正确的代码解决方案”。这是因为它们旨在提醒人类安全审计员注意所有潜在问题。然后由审计员检查代码并关闭问题(“不会修复”)或向适当的团队提出问题。

您可以在文档中找到更多信息。

于 2015-06-18T12:57:54.773 回答
1

根据您的版本,您可以将问题标记为“无法修复”(意味着接受此问题的债务 - 自 5.1 起)或“误报”(意味着您认为分析引擎错误 - 在 5.1 之前) )。

于 2015-06-18T10:10:35.317 回答