首页 > 解决方案 > Fortify 指出了一个问题:“Portability Flaw: File Separator”,但是代码中没有硬编码的分隔符

问题描述

Fortify SCA 工具发现了一个名为 Portability Flaw: File Separator 的问题,但对于这些问题的根源,没有硬编码的文件分隔符,例如“/”或“\”,只有文件扩展名,例如“.”。存在。

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

    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;
    }

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

标签: javafortify

解决方案


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

我看不到任何使用File.separator. 即使在文件路径格式为 的 OpenVMS 系统上,devicename:[directory.subdirectory]file.ext;versionJava 运行时也会在内部在/分隔符和正确的 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;
}

执行此操作时 Fortify 可以吗?


推荐阅读