org/slf4j/Logger.info(Ljava/lang/String;ljava/lang/对象;V 可用于将 CRLF 字符包含在日志消息中

This use of org/slf4j/Logger.info(Ljava/lang/String;Ljava/lang/Object;)V might be used to include CRLF characters into log messages

提问人:Vishnu Shinde 提问时间:1/2/2023 最后编辑:Vishnu Shinde 更新时间:1/2/2023 访问量:1017

问:

我在代码中记录请求正文参数时遇到了这个声纳问题(安全 - 日志的潜在 CRLF 注入)。

public ResponseEntity<SomeDto> someMethod(@RequestBody User user) {
 log.info("user received as --> {}", user);
}

如何解决此问题?谢谢。

spring-boot sonarqube logback slf4j crlf-vulnerability

评论

0赞 M. Deinum 1/2/2023
请对格式做点什么,因为我不知道你在发布什么。

答:

1赞 Andrey B. Panfilov 1/2/2023 #1

这真是令人讨厌的警告。问题是希望你写出愚蠢的代码,比如:sonarqubesonarqube

public ResponseEntity<SomeDto> someMethod(@RequestBody User user) {
    log.info(
            "user received as --> {}", 
            String.valueOf(user)
                    .replace("\r", "\\r")
                    .replace("\n", "\\n")
    );
}

这显然是不可接受的。

如果安全团队确实认为日志中的 CR/LF 字符是真正的安全问题,则唯一正确的方法是: