Checkmarx Java 修复 Log Forging - 清理用户输入

Checkmarx Java fix for Log Forging -sanitizing user input

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

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

谢谢!

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

}

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

一个 "Log Forging" 漏洞意味着攻击者可以设计安全敏感操作的日志并放置虚假的审计线索,从而可能牵连无辜用户或隐藏事件。

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

  • &amplt;代表<符号。
  • &ampgt;表示>符号。
  • &ampamp;代表&符号。
  • &ampquot;表示"标记。

它不会转义或删除 new-line/EOL/tab 个必须避免以保持日志完整性的字符。

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

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

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

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

希望这能解决您的问题。

  1. 查看 'Event Collection'

    部分中的 Logging - OWASP Cheat Sheet Series
  2. 最好的编码器还是OWASP Java Encoder => 解决@yaloner的2.

  3. OWASP也有一个项目帮助你处理日志注入OWASP Security Logging => 解决@yaloner的1.

看看他们会解决问题