CWE-117: Improper Output Neutralization for Logs

如何修复Veracode CWE 117 (日志的输出中性不正确)

当Veracode静态分析检测到应用程序正在基于来自应用程序外部的数据编写日志消息时,它会报告CWE 117(“日志中毒”)。

这可能是来自HTTP请求、数据库甚至文件系统的数据。令人担忧的是,如果使用基于文件的日志记录,攻击者可能会使用空白字符,如回车符(CR)和换行符(LF),将自己的日志行注入应用程序日志。这些字符通常分别表示为\r\n和\r\n,或者用十六进制0x0D、0x0A表示。

在攻击过程中,这可能会被用来污染日志文件,从而无法知道哪些日志条目来自应用程序,哪些来自攻击者。由于日志完整性已丢失,日志文件在审计方面的用处可能会大大降低。

log.error( transactionId + " for user " + username + " was unsuccessful."

如果任何一个变量都在用户控制之下,它们就可以通过使用\r\n for user foobar was successful\rn之类的输入注入假日志语句,从而允许它们伪造日志并掩盖它们的踪迹。

大多数新手会想知道应该使用什么方法从logger语句中传递的变量中删除CRLF。但是replaceAll()也不能解决这个问题,因为它不是Veracode批准的方法。Veracode推荐使用ESAPI对log进行处理,但是我并不想因为这个原因而引入ESAPI这个组件,那么就不得不寻求另外的方法。

在我的例子中,我使用了org.apache.commons.lang.StringEscapeUtils.escapeJava(),这成功解决了我的问题

log.error(StringEscapeUtils.escapeJava(transactionId) + " for user " + StringEscapeUtils.escapeJava(username) + " was unsuccessful."

当异常处理程序类面临问题时,可以使用org.apache.commons.lang.ExceptionUtils.getStackTrace()

log.error(ExceptionUtils.getStackTrace(ex));

参考链接:https://community.veracode.com/s/article/How-to-Fix-CWE-117-Improper-Output-Neutralization-for-Logs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值