【问题标题】:How to correct Path Manipulation error given by fortify?如何纠正强化给出的路径操作错误?
【发布时间】:2014-09-07 21:05:36
【问题描述】:

我需要读取保存在 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 在 (*) 标记行中给了我相同的错误(尽管验证已完成)。 如何消除错误?

【问题讨论】:

    标签: fortify path-manipulation


    【解决方案1】:

    我敦促您考虑安全漏洞,而不是尝试删除 Fortify 错误。

    问题是 user.home 可以被精心设计,可能带有 -D vm 参数,以允许打开或销毁系统上任何可能的任何名为 x.properties 的文件。例如,将 user.home 设置为 /usr/local 不会被您的黑名单检测到。然后可以读取或覆盖任何名为 /usr/local/x.properties 的文件。

    您需要质疑为什么 user.home 的任何值都可以被允许。您需要检查从 user.home 获得的路径是否从某个位置(例如 /home)开始。这称为白名单验证,是一种常见且众所周知的安全漏洞修复方法。一旦您确定提供的路径在已知位置具有根目录,那么您是否将目录横向列入黑名单。

    我知道这很痛苦,但仅通过黑名单来解决此问题的尝试充满危险,并且永远无法解决问题。这是一个真正的安全问题,而不仅仅是 Fortify 错误。

    【讨论】:

      猜你喜欢
      • 2014-02-11
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      相关资源
      最近更新 更多