SV.LOG_FORGING
未验证的用户在系统日志文件中输入信息时,会出现该错误。
从 2023.2 版本开始,此检查器将支持 Jakarta EE。
漏洞与风险
日志记录是组织实施的安全性措施的重要部分。日志条目可实现在出现安全性故障时创建自动警报工具、获取统计信息或者跟踪攻击者。日志伪造使攻击者可以通过添加虚假条目来操纵日志记录。这可能会对自动扫描实用工具造成干扰,并且导致攻击者可以在不被发觉的情况下发动攻击,或者在发动攻击之后误导审阅者。
Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。
缓解与预防
应该针对所有对特定日志具有特殊意义的字符(例如用于文本日志的 CR,或者用于 XML 日志的尖括号)进行字符串转义,并且应该针对所有非文本字符进行筛选。
示例 1
复制
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String amount = req.getParameter("amount");
try {
int iAmount = Integer.parseInt(amount);
processAmount(iAmount);
} catch (NumberFormatException e) {
req.getSession().getServletContext().log("Incorrect int value specified for the 'amount' " + amount);
}
}
针对第 20 行报告 SV.LOG.FORGING:在第 15 行将未验证的用户输入存储在 amount 变量中,然后在第 20 行将此变量与常数字符串相串联,并且将其写入日志。此序列可能导致日志伪造。
外部指导
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。