在 java 中传递声纳的 PT_RELATIVE_PATH_TRAVERSAL

Pass sonar's PT_RELATIVE_PATH_TRAVERSAL in java

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

File f = new File(MY_DIR + filename);

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

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

根据您的版本,您可以将问题标记为 "Won't fix"(表示接受此问题的欠款 - 从 5.1 开始)或 "False positive"(表示您认为分析引擎是错误的 - 5.1 之前)。

米斯芬德尔是对的。您唯一的选择是标记问题 "Won't Fix" 或者如果您的平台版本不可用,"False Positive".

这些安全规则没有 "correct code solution"。那是因为它们旨在提醒人类安全审计员注意所有潜在问题。然后由审计员检查代码并关闭问题 ("Won't Fix") 或向适当的团队提出问题。

您可以找到更多 in the docs