修复路径操纵错误

Mik*_*ike 2 java validation fortify

Fortify在进行新File(path)比较的行上给出了Path Manipulation错误。我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

我需要查看文件是否存在于我们的Web服务器中,因此我将文件名作为参数传递,从web.xml获取整个目录路径,将其附加到文件名,然后组成路径并进行检查针对File对象,查看其是否存在。

Dou*_*eld 5

您不希望远程Web用户查看C:/ Windows / System32是否存在或/ etc / hosts是否存在,因为这使他们可以在服务器上进行取证研究。

您可能没有意识到函数通过在输入字符串中包含适当数量的“ ..”序列来使它们做到这一点。

有两种方法可以解决此问题:

  1. 白名单方法。清除输入参数中的所有字符,并仅允许“ a”到“ z”,甚至可能是“”。如果输入超出这些范围,则引发异常。

1a。或者,如果您知道有效文件列表少于20个,则将它们列出,如果输入不完全匹配,则抛出异常。

  1. 黑名单方法。检查输入并引发异常,如果该输入包含任何序列“ ..”或任何正斜杠或反斜杠。一般来说,这不是深度防御,但就我现在所读的功能而言,这是可以的。