Checkmarx Java修复日志伪造-清理用户输入

时间:2019-03-26 19:05:13

标签: spring-boot spring-mvc checkmarx

任何人都可以在下面的getCourses方法中建议对courseType变量所需的正确的清理/验证过程。我正在使用该变量写入日志文件。

我尝试了HtmlUtils.HtmlEscape(),但没有得到预期的结果。

谢谢!

@RequestMapping(value = "/retriveCourses", method = RequestMethod.GET)
@ResponseBody
public List<Course> getCourses(@RequestParam(value = "courseType", required = false) String courseType) {

}

2 个答案:

答案 0 :(得分:0)

在这种情况下,Checkmarx工具似乎是正确的。

“日志伪造”漏洞意味着攻击者可以设计对安全敏感的操作的日志,并放置虚假的审核跟踪,从而可能牵扯到无辜的用户或隐藏事件。

使用htmlEscape时会转义一些特殊字符:

  • “&lt;”代表<符号。
  • “&gt;”代表>符号。
  • “&amp;”代表&符号。
  • “”代表“”标记。

它不会转义或删除为了保持日志完整性而必须避免的换行符/ EOL /制表符。

避免日志伪造的最佳实践建议是:

  1. 请确保替换所有相关的危险字符。例如:

    cleanInput = input.replace('\ t','-')。replace('\ n','-')。replace('\ r','-');

  2. 验证所有输入,无论来源如何。验证应基于白名单。仅接受适合指定结构的数据,而不拒绝不良模式。检查:数据类型,大小,范围,格式,期望值。

希望能解决您的问题。

答案 1 :(得分:0)

  1. 查看“日志注入”部分的OWASP Injection Prevention Cheat Sheet

  2. 仍然是最好的编码器OWASP Java Encoder =>解决@yaloner的2。

  3. OWASP上还有一个项目可以帮助您处理日志注入OWASP Security Logging =>解决@yaloner的1.

看看它们会解决问题