security - 强化路径操作错误

标签 security fortify

Fority Scan 在以下代码段中报告了“路径操作”安全问题

String filePath = getFilePath(fileLocation, fileName);
final File file = new File(filePath);
LOGGER.info("Saving report at : " + filePath);
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(file));
fileWriter.write(fileContent);

所以我正在检查 fileLocation 中的黑名单字符并抛出异常,但 Fortify 仍在抛出异常。
try {
    String filePath = getFilePath(fileLocation, fileName);
    if (isSecurePath(filePath)) {
      final File file = new File(filePath);
      LOGGER.info("Saving report at : " + filePath);
      BufferedWriter  fileWriter = new BufferedWriter(new FileWriter(file));
      fileWriter.write(fileContent);
    } else {
      throw new Exception("Security Issue. File Path has blacklisted characters");
    }

} catch (final Exception e) {
    LOGGER.error("Unable to prepare mail attachment : ", e);
    message = "Mail cannot be send, Unable to prepare mail attachment";
}


private boolean isSecurePath(String filePath) {
    String[] blackListChars = {".."};
    return (StringUtils.indexOfAny(filePath, blackListChars)< 0);
}

我应该忽略扫描报告还是对此有什么正确的解决方法?

最佳答案

首先,SCA 是一个静态分析工具,因此无法检查您的自定义验证以确定它是否正常工作,因为这是设计为 WebInspect 等动态工具的目的。

其次,黑名单是保护任何东西的糟糕方法,白名单是更安全的方法,而且您提到对标准输出进行黑名单验证的事实会诱使攻击者。这是因为您必须考虑每一种可能的攻击方式,包括可能尚未发现的方式,因此在软件发布之前很容易过时。

第三,这绝对不足以阻止路径操作,因为您只考虑寻找相对路径的人,更具体地说是当前目录上方的相对路径。

您无法检测是否有人指定了完整路径,或者是否有人进入了一个完全指向单独目录的符号链接(symbolic link)的目录,以及其他一些可能的替代攻击。

理想情况下,您应该遵循 SCA 显示的建议,并拥有非常具体的允许路径和文件名。如果无法做到这一点,请使用白名单技术来指定允许的唯一字符,然后验证以指定它不是例如 SMB 共享或指定的完整路径。如果它没有根据用户应该指定的规范进行验证,则拒绝它。

这样做会消除问题本身,但 SCA 可能仍会在结果中显示问题(同样由于静态与动态分析之间的差异)。这可以通过对其进行审计或为验证问题的函数创建自定义清理规则来解决。

关于security - 强化路径操作错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21263056/

相关文章:

java - 如何保护用于服务器到服务器通信的 App Engine 端点?

加强对多台机器的扫描

spring-boot-actuator - 动态代码评估 : Unsafe Deserialization (Spring Boot 2) - how to avoid actuator related fortify issue, 还是误报?

java - 在 Notes 客户端中运行时 Domino 代理程序问题 - 在服务器上运行良好

java - 文件名的路径操作错误修复

fortify - Fortify SCA排除多个文件

fortify - 如何从 Fortify 扫描中排除目标文件夹

security - 使用 WSS 进行身份验证然后使用 WS 进行数据有意义吗?

asp.net-mvc - 使用一种识别服务保护 2 个不同的 Web 应用程序

c# - 如果使用 MySQL 连接器,用户可以从我的软件中获取数据库信息吗