java - Checkmarx Java 修复 Log Forging - 清理用户输入
问题描述
任何人都可以在以下 getCourses 方法中建议 courseType 变量所需的正确清理/验证过程。我正在使用该变量写入日志文件。
我试过 HtmlUtils.HtmlEscape() 但没有得到预期的结果。
谢谢!
@RequestMapping(value = "/retriveCourses", method = RequestMethod.GET)
@ResponseBody
public List<Course> getCourses(@RequestParam(value = "courseType", required = false) String courseType) {
}
解决方案
在这种情况下,Checkmarx 工具似乎是正确的。
“日志伪造”漏洞意味着攻击者可以设计安全敏感操作的日志并设置错误的审计线索,从而可能牵连无辜用户或隐藏事件。
使用htmlEscape
时会转义一些特殊字符:
&lt;
代表<
标志。&gt;
代表>
标志。&amp;
代表&
标志。&quot;
代表"
标记。
它不会转义或删除为保持日志完整性而必须避免的换行符/EOL/制表符。
避免日志伪造的最佳实践建议是:
确保替换所有相关的危险字符。例子:
cleanInput = input.replace('\t', '-').replace('\n', '-').replace('\r', '-');
验证所有输入,无论来源如何。验证应基于白名单。只接受符合指定结构的数据,而不是拒绝错误的模式。检查:数据类型、大小、范围、格式、预期值。
希望这可以解决您的问题。
推荐阅读
- spring-boot - Sharding-jdbc:precisionAlgorithmClassName:java -jar project.jar error:Caused by: java.lang.ClassNotFoundException
- typescript - 我应该如何从一个包中导出多组类/接口
- wordpress - 获取自定义帖子类型名称返回空
- json - 为什么 Mongo JSON 查询无法由 runMangoAggregation Processor Nifi 执行?
- c# - VS2019 中的 Azure IoT 解决方案仅适用于系统重启后的首次运行
- postgresql - 在 postgres 12 中枢轴
- c++ - 对齐中的逗号运算符
- java - 在同一索引中的链接列表中合并/添加多个元素的问题(JAVA)
- reactjs - 如何禁用蚂蚁设计时间选择器粘贴时间
- c++ - 使用 C++ 在特定时间打开链接