java.util.Properties.load() 发布 OWASP Top 10 2017

问题描述

我在 Java 中有此代码,用于使用属性文件,但是在使用 MicroFocus FortiFy Owasp Top 10 2017 执行安全代码扫描时,它会生成“A1 注入”类型的问题,并且实现方法 java.util.Properties.load() 的行中的“A5 broken Access Control”。我找不到这个问题的解决方案。属性文件位于不同目录中的构建 WAR 之外。

我的代码

public void initPop() {
    logger.info("Cargar archivo de propiedades en memoria");
    String configProp = "config.properties";
    try {
        Properties prop = new Properties();
        InputStream inputSt = new FileInputStream("/home/ejm/properties/" + configProp);
        prop.load(inputSt);
        Map<String,String> help = new HashMap<String,String>();
        for (Enumeration<?> names = prop.keys(); names.hasMoreElements();) {
            String key = (String) names.nextElement();
            help.put(key,prop.getProperty(key));
        }
        setLstProp(help);
        inputSt.close();
        prop.clear();
    } catch (Exception ex) {
        logger.error("[getValue] Archivo " + configProp + " no enconTrado : " + ex.toString());
    }
}

MicroFocus FortiFy Owasp 2017 年 10 强报告:

Report OWASP TOP 10 2017

解决方法

这个案例显示了一个正确的源代码,并且做了它应该做的事情。

检查表明您的代码可能会或可能不会被用于操纵数据或访问部分或您的软件/公司,否则会受到限制和禁止。

让我们进入细节。 A1 注射。这只是说您从可以操作的外部文件加载可读数据。例如如果您将访问数据保存在可以读取或更改的属性文件中。属性文件没有安全措施(如 CRC 或编码)。

A5 访问权限。它警告您 - 如果您立即加载和使用数据 - 可能会通过操纵访问或重定向到禁止系统来感染您的系统(例如,您将链接保存到通常只能通过某种登录访问的隐藏端口)控制)。

安全的关键是“清理您的输入数据”。控制每一对(a)值和范围(b)数据和链接的可访问性(例如,如果允许该用户这样做,则将其与数据库中的条目进行比较)(c)仅存储该工作站真正需要的值(例如显示器的大小、快捷方式、选项等)。如果你做到了这一切,你就会看到它是什么 - 一个公平的警告。