Fortify指出了一个问题:"可移植性缺陷:文件分隔符",但代码中没有硬编码分隔符



Fortify SCA 工具发现一个名为可移植性缺陷:文件分隔符的问题,但对于这些问题的根源,没有硬编码的文件分隔符,如"/"或"\",只有文件扩展名如"."存在。

我们的客户使用 Fortify SCA 扫描其旧系统源代码。强化发现可移植性缺陷:文件分隔符问题。它说在 String 数组中声明的文件名包含硬编码的文件分隔符(这个字符串数组是问题的根源(,但我在这些文件名字符串中看不到任何文件分隔符,例如"/"或"\"。

    public static final String SYS_SPRAT = File.separator; //this is declared as a class attribute
    String[] fileNames = { //fortify points out here is the source of this issue
            "", 
            "2.5.1aaaaa.pdf", 
            "2.5.2bbbbb.pdf", 
            "2.5.3ccccc.pdf", 
                            .......
            "5.1.4甲甲甲甲甲.pdf", 
    };
    String fileName = null;
    File file = null;
    int iParam = Integer.parseInt(sParam);
    if (iParam >= 1 && iParam <= 26) {
        fileName = fileNames[iParam];
        String filePath = SYS_SPRAT + "home" + SYS_SPRAT + "xxx" + SYS_SPRAT + "ooo" + SYS_SPRAT + "Resource" + SYS_SPRAT + fileName;
        file = new File(filePath);  
    else {
        addFacesMessage("wrong parameter");
        return null;
    }

我仍然无法弄清楚为什么会有问题。是误报吗?(但为什么?

看来Fortify在这里可能过于严格了。甚至他们的网站也说使用这样的File.separator应该没问题。

我看不到使用File.separator的任何可移植性问题。即使在文件路径采用devicename:[directory.subdirectory]file.ext;version格式的OpenVMS系统上,Java运行时也会在内部转换/分隔符和正确的VMS格式。

首先,使用"查找"工具仔细检查filenames[]中的任何字符串中没有任何/字符(不要仅仅依靠目视检查(。如果绝对没有这样的字符,请继续执行以下建议。

尽量避免File.separator。相反,请尝试使用 Paths.get:

public static final Path RESOURCE_DIR = Paths.get(
        "home", "xxx", "ooo", "Resource");
String[] fileNames = { 
        "", 
        "2.5.1aaaaa.pdf", 
        "2.5.2bbbbb.pdf", 
        "2.5.3ccccc.pdf", 
                        .......
        "5.1.4甲甲甲甲甲.pdf", 
};
String fileName = null;
File file = null;
int iParam = Integer.parseInt(sParam);
if (iParam >= 1 && iParam <= 26) {
    fileName = fileNames[iParam];
    file = RESOURCE_DIR.resolve(filePath).toFile();  
else {
    addFacesMessage("wrong parameter");
    return null;
}

当你这样做时,强化可以吗?

相关内容

  • 没有找到相关文章

最新更新