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 没有影响。
任何帮助,将不胜感激!
最初撰写此问题时,我们团队使用的是 log4j v1.2.8,但是我们注意到升级到 log4j v2.6.2 后所有日志伪造问题都消失了。
一旦 log4j 版本升级,Fortify 日志伪造问题就会消失。上述问题中的 cleanLogString() 方法也是不必要的。例如:
LOGGER.info("getLongFromTimestamp(" + value + ")");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31102 次 |
| 最近记录: |