Fortify在线上进行Path Manipulation错误,进行新的File(路径)比较。我正在使用Struts 2.
任何人都可以告诉我如何解决这个问题,以便强化不会出现此错误吗?
private boolean filePresent(String fileName) {
if (fileName != null) {
String path = getDirPath();
if (path != null) {
path = path.endsWith("/") ? path : path + "/";
path = path + fileName;
if (new File(path).exists()) {
setFileName(fileName);
return true;
}
}
}
return false;
}
我需要查看该文件是否存在于我们的网络服务器&因此我将文件名作为参数传递,从web.xml获取整个目录路径,将其附加到文件名和&然后组成路径&检查File对象以查看它是否存在。
答案 0 :(得分:4)
您不希望远程Web用户查看C:/ Windows / System32是否存在,或者/ etc / hosts是否存在,因为这样他们就可以对您的服务器进行取证研究。
您可能没有意识到您的函数允许它们通过在输入字符串中包含适当数量的“..”序列来实现这一点。
有两种方法可以解决问题:
1a上。或者,如果您知道有效文件列表少于20,则只列出它们,如果输入没有完全匹配,则抛出异常。
答案 1 :(得分:0)
您甚至可以使用过滤器来执行此操作
过滤器中的
chain.doFilter(new RequestWrapper((HttpServletRequest) request), response);
RequestWarper中的使用类似
的内容if(value.contains("..\\"))
value = value.replace("..\\", "");
if(value.contains("../"))
value = value.replace("../", "");
if(value.contains("./"))
value = value.replace("./", "");