我在修复 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;
}
cleanLogString() 方法修复了我的项目中的其他 Log Forging Fortify 问题,但它对上面的 2 个没有影响。
任何帮助,将不胜感激!
可以使用 fortify Java 注释来告诉 Fortify 从清理函数返回的数据现在是安全的。
当查看我的日志伪造问题时,我有通过 Web API 输入的字符串,因此有标志XSS
and WEB
在我的弦上。我试图找到只能删除这些标志的注释,但找不到任何方法来删除WEB
旗帜。我找到的唯一文档是Samples/advanced/javaAnnotation
目录。
由于我的清理方法确实会清理字符串,因此我选择删除所有标志。但这可能是一个问题,因为它可能隐藏侵犯隐私的行为。
@FortifyValidate("return")
private String sanitizeString(String taintedString) {
return doSomethingWithTheString(taintedString);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)