Java 如何修复在新文件(filePath)中查找潜在路径遍历的错误

Java 如何修复在新文件(filePath)中查找潜在路径遍历的错误,java,security,findbugs,Java,Security,Findbugs,但它仍然有潜在的路径遍历错误,如何修复这个发现错误?多谢各位 使用硬代码是可以的,但它不符合我的要求 public void createFile(String filePath) { File file = new File(filePath); } change to ====> public void createFile(String filePath) { File file = new File(FilenameUtils.getFullPath(pathName)

但它仍然有潜在的路径遍历错误,如何修复这个发现错误?多谢各位

使用硬代码是可以的,但它不符合我的要求

public void createFile(String filePath) {
  File file = new File(filePath);
}

change to ====>

public void createFile(String filePath) {
  File file = new File(FilenameUtils.getFullPath(pathName), 
                       FilenameUtils.getName(pathName));
}

解决此问题的方法之一是不使用变量输入访问服务器上的文件。这里有一个建议

当文件名集有限或已知时,从 将固定输入值(如数字ID)设置为实际值 文件名,并拒绝所有其他输入。例如,ID 1可以映射到 “inbox.txt”和ID 2可以映射到“profile.txt”。功能,例如 ESAPI AccessReferenceMap提供此功能


SonarQube
仍然检测到您的代码无效,因为即使使用
FilenameUtils.getName()
,您的代码仍然使用用户提供的变量作为文件路径的一部分。

它是
动态Web项目吗?您的映像目录位于哪里?这只是一个示例,我的意思是如果使用硬代码path+FilenameUtils.getName(pathName)),它将不会报告此错误。但是,如果使用FilenameUtils.getFullPath(路径名)+FilenameUtils.getName(路径名)),它将报告此错误。我想知道如何在没有硬代码的情况下修复这个bug?谢谢。这是java项目,此错误报告用于新文件(路径名)函数变量。如果您使用servlet,请尝试使用
getServletContext().getRealPath(“/image”)
hi,Chinamay,这不是一个web项目,filePath不是一个确定的值。
public void createFile(String filePath) {
  File file = new File("resource/image/", 
                       FilenameUtils.getName(pathName));
}