Sonar 有两个令人难过的问题。具有相对路径遍历问题的代码行中的第一个代码如下所示:
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);
}
但是 Sonar 仍然说我在这两条线上有一个漏洞。如何告诉它我已经找到了解决方案?
最佳答案
米斯芬德尔是对的。您唯一的选择是将问题标记为“无法修复”,或者如果您的平台版本不支持该问题,则标记为“误报”。
这些安全规则没有“正确的代码解决方案”。这是因为它们旨在提醒人类安全审计员注意所有潜在问题。然后由审计员检查代码并关闭问题(“无法修复”)或向适当的团队提出。
您可以找到更多in the docs .
关于java - 在java中传递sonar的PT_RELATIVE_PATH_TRAVERSAL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909672/