Java Can';t解决原木锻造加固问题

Java Can';t解决原木锻造加固问题,java,fortify,log-forging,Java,Fortify,Log Forging,我在修复Fortify中的原木锻造问题时遇到问题。getLongFromTimestamp()方法中的两个日志调用都会引发“将未验证的用户输入写入日志”的问题 cleanLogString()方法修复了我的项目中的其他日志伪造强化问题,但是它对上述2个问题没有影响 任何帮助都将不胜感激 我知道我遇到过这样的情况:应用程序的复杂性会阻止任何恶意输入按预期工作;FordStand并不认为这是安全的。我打赌你也遇到了同样的事情 您正在从日志消息中剥离任何真正有用的字符,但是如果在写入日志之前对输出进行

我在修复Fortify中的原木锻造问题时遇到问题。getLongFromTimestamp()方法中的两个日志调用都会引发“将未验证的用户输入写入日志”的问题

cleanLogString()方法修复了我的项目中的其他日志伪造强化问题,但是它对上述2个问题没有影响


任何帮助都将不胜感激

我知道我遇到过这样的情况:应用程序的复杂性会阻止任何恶意输入按预期工作;FordStand并不认为这是安全的。我打赌你也遇到了同样的事情

您正在从日志消息中剥离任何真正有用的字符,但是如果在写入日志之前对输出进行一些编码,则会发生什么


可以使用fortify Java注释告诉fortify从清理函数返回的数据现在是安全的

当查看我的日志伪造问题时,我的字符串通过web API输入,因此在字符串上有标志
XSS
web
。我试图找到只删除这些标志的注释,但找不到任何方法删除
WEB
标志。我找到的唯一文档是
Samples/advanced/javaAnnotation
目录

由于我的环卫方法不会清理字符串,所以我选择删除所有标志。但这可能是个问题,因为它可能隐藏侵犯隐私的行为

@FortifyValidate("return")
private String sanitizeString(String taintedString) {
    return doSomethingWithTheString(taintedString);
}

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

一旦log4j版本升级,强化日志锻造问题应消失。上述问题的cleanLogString()方法也是不必要的。例如:

LOGGER.info("getLongFromTimestamp(" + value + ")");

使用
reflect
try catch

它很容易作弊

ParseExceptions可以将该值作为
getMessage
返回的字符串的一部分,因此我怀疑对
getMessage
返回的值调用
cleanLogString
将解决其中一个问题。另一个问题发生在
LOGGER.info
调用上?@Neil Smithline感谢您的响应,但是添加cleanLogString(e.getMessage())并没有解决LOGGER.warn()语句的问题。我在问题中加入了这一变化,以免引起任何其他混乱。正确的是,另一个问题是LOGGER.info语句。我的下一个猜测是Fortify没有将
cleanLogString
函数识别为净化受污染数据的功能。我不知道为什么它会在某些地方识别它,但在其他地方却不能识别。你在什么地方有自定义规则吗?@NeilSmithline,不幸的是,我没有访问强化规则的权限。我的领导告诉我,规则仍在制定中。一旦规则变得更加稳定,我会尝试进一步深入研究。谢谢你的主意。Fortify有误报,如果没有自定义规则,你无法摆脱。你能把这些标记为非问题并忘掉它们吗?嘿,谢谢你的回答@DaveC,但不幸的是,我的团队正在使用Artifactory来处理我们的maven依赖项,而ESAPI jar没有授权我们使用。如果我们能设法获得访问权限,我会让您知道它是如何工作的。在哪个库
@FortifyValidate
注释可用?它作为一个jar出现在fortify安装目录中。
@FortifyValidate("return")
private String sanitizeString(String taintedString) {
    return doSomethingWithTheString(taintedString);
}
LOGGER.info("getLongFromTimestamp(" + value + ")");