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

Java 强化报告中的日志锻造问题,java,fortify,log-forging,Java,Fortify,Log Forging,我已经为我的申请生成了一份强化报告。在强化报告中,以下代码显示了日志锻造问题: holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE(); logger.info("This is some description" + holDate + holName ); 根据一些人的建议,我将“/n”替换为“”,将“/r”替换为“”,但问题仍然没有解决 有谁能告诉我怎么解决这个问题吗 提前感谢。黑名单修复程序,例如删除日志清除字

我已经为我的申请生成了一份强化报告。在强化报告中,以下代码显示了日志锻造问题:

holDate = ((MaintainHolidayCalenderForm) form).getCALENDER_DATE();
logger.info("This is some description" + holDate + holName );
根据一些人的建议,我将“/n”替换为“”,将“/r”替换为“”,但问题仍然没有解决

有谁能告诉我怎么解决这个问题吗


提前感谢。

黑名单修复程序,例如删除日志清除字符(/n/r),仍然会给攻击者留下对应用程序进行恶意操作的机会。如果holDate和holName是从浏览器提交的,则它们是UTF-8字符串,可能非常长,并且在相当大的UTF-8 unicode字符集中包含任何字符。如果日志通常使用HTML查看器(常见)查看,则示例攻击可能是这样的:攻击者可以伪造一条记录,显示他们已注销,并进行恶意攻击,然后编写一条日志消息,使用任何unicode字符覆盖该活动,这些字符会导致返回“友好攻击者已注销-此处无内容”消息的退格或删除。(注意:永远不要试图预测攻击者可能会如何影响坏东西,因此不要尝试将所有获取unicode退格字符的方法列入黑名单。)

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

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

您可能应该在表单POJO的setters中执行此白名单输入验证