我已为我的应用程序生成了Fortify报告。在Fortify报告中,它显示了以下代码中的Log forging问题:
holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE();
logger.info("This is some description" + holDate + holName );
根据某些人的建议,我已将“/ n”替换为“”,将“/ r”替换为“”,但问题仍未得到解决。
任何人都可以告诉我如何解决这个问题吗?
提前致谢。
答案 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中进行白名单输入验证。