无法解决Log Forging Fortify问题

Bri*_*edd 7 java fortify log-forging

我在解决 Fortify 中的日志伪造问题时遇到问题。“将未经验证的用户输入写入日志”问题是从 getLongFromTimestamp() 方法中的两个日志调用中引发的。

public long getLongFromTimestamp(final String value) {
    LOGGER.info("getLongFromTimestamp(" + cleanLogString(value) + ")");

    long longVal = 0;
    Date tempDate = null;
    try {            
        tempDate = new SimpleDateFormat(FORMAT_YYYYMMDDHHMMSS, Locale.US).parse(value);
    } catch (ParseException e) {
        LOGGER.warn("Failed to convert to Date: " + cleanLogString(value) + " Exception: " + cleanLogString(e.getMessage()));
        throw new Exception(e);
    }

    if (tempDate != null) {
        longVal = tempDate.getTime();
    }
    return longVal;
}

private cleanLogString(String logString) {
    String clean = logString.replaceAll("[^A-Za-z0-9]", "");

    if(!logString.equals(clean)) {
        clean += " (CLEANED)";
    }

    return clean;
}
Run Code Online (Sandbox Code Playgroud)

cleanLogString() 方法修复了我项目中的其他 Log Forging Fortify 问题,但它对上述 2 没有影响。

任何帮助,将不胜感激!

Bri*_*edd 2

最初撰写此问题时,我们团队使用的是 log4j v1.2.8,但是我们注意到升级到 log4j v2.6.2 后所有日志伪造问题都消失了。

一旦 log4j 版本升级,Fortify 日志伪造问题就会消失。上述问题中的 cleanLogString() 方法也是不必要的。例如:

LOGGER.info("getLongFromTimestamp(" + value + ")");
Run Code Online (Sandbox Code Playgroud)