我使用了System.getenv("envVariableName")
,它引发了Log Forging问题。
我什至尝试使用ESAPI编码器对返回的String进行编码,但这没有帮助。
我的代码段:
String envValue = encode(System.getenv("envVariableName"));
String encode(String message) {
if (message != null) {
String clean = message.replace('\n', '_').replace('\r', '_');
if (ESAPI.securityConfiguration().getLogEncodingRequired()) {
clean = ESAPI.encoder().encodeForHTML(message);
if (!message.equals(clean)) {
clean += " (Encoded)";
}
}
return clean;
}
return message;
}
关于我所缺少的任何建议,将不胜感激。
答案 0 :(得分:1)
Fortify(至少使用过)将ESAPI的编码器删除了“ web”污点标志,但我认为这仅是在Fortify的XSS规则中。我不认为他们在Log Forging的背景下做到了这一点,尽管我可以肯定他们肯定ESAPI的日志记录可提供“安全日志记录”。
如果我在这里了解您的需求,那么您不只是希望将此特定实例标记为“不是问题”并取消显示,而是希望它首先不要将此模式识别为Log Forging实例。不幸的是,您无法真正修改HP(现在称为Microfocus)Fortify规则。 (它们的规则包甚至都已加密,因此在调试器下无法运行AWB,甚至无法查看其规则。)如果您确定“环境变量”是“受信任的”,我想您可以设置并应用AWB过滤器集,它将忽略接收器上唯一的污点标志为“环境变量”的实例。 (或者仅将其应用于此“日志伪造”类别。)
但通常,您要么不得不忍受噪音(Fortify会产生很多误报),要么必须手动审核每个实例并将误报抑制为“不是问题” ”。这是通常的工作方式,尽管有时该功能仅限于AppSec专家。
希望有帮助。
答案 1 :(得分:0)
Fortify指定的行实际上位于String envValue = encode(System.getenv(“ envVariableName”));?
当您从不受信任的来源向日志中写入一些信息时,通常会发生日志伪造问题:https://vulncat.fortify.com/en/detail?id=desc.dataflow.java.log_forging#C%23%2FVB.NET%2FASP.NET
答案 2 :(得分:0)
问题:如果您已经在使用ESAPI,那么为什么不使用ESAPI的日志记录,因为它提供了“安全日志记录”,如防止Log Forging攻击一样?