我需要读取保存在user_home文件夹中的属性文件。
PropsFile = System.getProperty("user.home") + System.getProperty("file.separator")+ "x.properties";
Fortify在这一行中给出了路径操作错误。正确值的数量很大,因此黑名单是唯一可行的方法。所以为了避免它,我改变了下面的代码。
String propsFile = null;
StringBuffer sb = new StringBuffer();
String xProperties = "x.properties";
String userHome = System.getProperty("user.home"); // *
if(userHome.contains("..\\"))
userHome = userHome.replace("..\\", "");
if(userHome.contains("../"))
userHome = userHome.replace("../", "");
if(userHome.contains("./"))
userHome = userHome.replace("./", "");
String fileSeperator = System.getProperty("file.separator"); // *
if(fileSeperator.equals("/") || fileSeperator.equals("\\")){
sb = sb.append(userHome).append(fileSeperator).append(xProperties);
propsFile = sb.toString();
}
但仍然强化是在(*)标记的行中给出了相同的错误(尽管验证已完成)。 我该如何删除错误?
答案 0 :(得分:0)
我没有尝试删除Fortify错误,而是敦促您考虑安全漏洞。
问题在于可以使用-D vm arg来制作user.home,以允许打开或销毁任何名为x.properties的文件,可以在系统的任何位置使用。例如,将黑名单中的user.home设置为/ usr / local不会被检测到。然后可以读取或覆盖任何名为/usr/local/x.properties的文件。
您需要质疑为什么可以允许任何user.home值。您需要检查从user.home获取的路径是否以某个位置(例如/ home)开头。这是白名单验证,是一种常见且众所周知的安全漏洞修复方法。一旦确定所提供的路径在已知位置具有根,那么您是否将目录横向列入黑名单。
我知道这是一种痛苦,但单独将黑名单解决这个问题的尝试充满了危险并且永远无法解决问题。这是一个真正的安全问题,而不仅仅是Fortify错误。