java - 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;
}
我仍然无法弄清楚为什么会出现问题。是误报吗?(但为什么?)
解决方案
似乎 Fortify 在这里可能过于严格。甚至他们的网站也说这样使用File.separator
应该没问题。
我看不到任何使用File.separator
. 即使在文件路径格式为 的 OpenVMS 系统上,devicename:[directory.subdirectory]file.ext;version
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;
}
执行此操作时 Fortify 可以吗?
推荐阅读
- android - 使用 Intent 打开 Hik-Connect
- javascript - 用于操作 CSS 自定义属性的 JavaScript 函数在 $(window).resize() 上不起作用
- google-apps-script - 更改 googlescript 中文件夹的名称?
- scala - sbt complie 上的 scala 中的 log4j2 给出了未解决的依赖关系路径
- javascript - 如何使用javascript更改另一个页面上的信息
- ruby-on-rails - 错误的 URI(不是 URI?):'redis://redis.xxx.ng.0001.apse1.cache.amazonaws.com:6379/1' URI::InvalidURIError Rails with aws redis
- html - 如何使用可变文本基线垂直对齐项目
- javascript - 在jQuery中按数据事件日期对div进行排序
- python - 如何分别为 Index.html 的一部分创建视图?
- c++ - C++ 数据类型及其范围