Fortify扫描遇到了Path Manipulation问题,定位代码如下:
File publisFile = null;
File publisFileDir = new File(OSSFileUtils.getDeploy()+"/"+corpPK);
涉及到安全性问题,在文件目录下,没有限制文件目录,可能存在的问题是:可以退回上一级目录,继而访问上一级内容,
解决办法:step1增加工具方法对文件目录的特殊字符进行处理
public static String validFilePath(String filepath) throws Exception{
List<String> allowedExtensions = new ArrayList<>();
boolean result = false;
allowedExtensions.add(".xml");
allowedExtensions.add(".jar");
allowedExtensions.add(".api");
allowedExtensions.add(".properties");
allowedExtensions.add(".xsd");
allowedExtensions.add(".flw");
allowedExtensions.add(".schema");
allowedExtensions.add(".MF");
allowedExtensions.add(".log");
for(String suf:allowedExtensions){
if(filepath.endsWith(suf)){
result = true;
break;
}
}
if(!result){
// 按指定模式在字符串查找
String pattern1 = "(.*)(\\.log\\.{0,1}\\d{0,})$";
// 创建 Pattern 对象
Pattern r1 = Patternpile(pattern1);
// 现在创建 matcher 对象
Matcher m1 = r1.matcher(filepath);
if(!m1.matches()){
Exception Exception = new Exception("file name is Illage") ;
throw Exception ;
}
}
filepath.replaceAll("../", "");
filepath.replaceAll("..\\\\", "");
return filepath;
}
step2.引用工具方法
String temp;
temp = ESAPIUtil.validFilePath(OSSFileUtils.getProduct_package());
File f = new File(temp, p.getFileName());
问题解决!
更多推荐
Path Manipulation Fortify
发布评论