强化报告中的日志锻造问题

时间:2014-06-26 10:41:25

标签: java fortify log-forging

我已为我的应用程序生成了Fortify报告。在Fortify报告中,它显示了以下代码中的Log forging问题:

holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE();
logger.info("This is some description" + holDate + holName );

根据某些人的建议,我已将“/ n”替换为“”,将“/ r”替换为“”,但问题仍未得到解决。

任何人都可以告诉我如何解决这个问题吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

黑名单修复,例如剥离日志清除字符(/ n / r),仍然为攻击者提供了对应用程序进行恶意攻击的机会。如果holDate和holName是从浏览器提交的,则它们是UTF-8字符串,这可能很长并且在相当大的UTF-8 unicode字符集中具有任何字符。如果通常使用HTML查看器(常见)查看日志,则示例攻击可能是这样的:攻击者可伪造一条记录,表明他们已注销,执行其不良内容,然后编写一条日志消息,使用任何内容覆盖该活动unicode字符导致退格或dels回到友好的攻击者注销 - 这里没什么可看的'信息。 (注意:你永远不应该试图预测攻击者如何影响坏事,所以不要试图将所有方法列入黑名单以获得unicode中的退格字符。)

您应该确保您写入日志的数据是您期望的类型,也称为白名单验证,并且具有合理的长度,而不是将其列入黑名单。

所以修复(在你发布的代码中): 1.确保holDate是Date对象(java.util.Date),如果它还没有 2. HolName可能是一个长度相对较小的字母数字字符串。选择一个较小的长度(如30个字符)并确保holName中只接受字母数字字符 检查长度后,您可以使用正则表达式String.matches("^[a-zA-Z0-9]*$"),以确保您只接受字母数字字符。

您应该在表单pojos的setter中进行白名单输入验证。