我需要读取保存在 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();
}
但强化仍然在 (*) 标记行中给我同样的错误(尽管验证已完成)。
我怎样才能消除错误?
我建议您不要尝试消除 Fortify 错误,而是考虑安全漏洞。
问题是 user.home 可以被精心设计(可能使用 -D vm 参数),以允许打开或销毁系统上任何位置的任何名为 x.properties 的文件。例如,将 user.home 设置为 /usr/local 不会被黑名单检测到。然后可以读取或覆盖任何名为 /usr/local/x.properties 的文件。
您需要质疑为什么可以允许 user.home 的任何值。您需要检查从 user.home 获取的路径是否以某个位置(例如 /home)开头。这称为白名单验证,是一种常见且众所周知的安全漏洞修复方法。一旦确定所提供的路径在已知位置具有根,那么您就可以将目录遍历列入黑名单。
我知道这很痛苦,但尝试仅通过黑名单来解决此问题充满危险,并且永远无法解决问题。这是一个真正的安全问题,而不仅仅是 Fortify 错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)