0

我们有一个使用 Logback 和 SLF4J 的 Spring 项目。我一直致力于在我们的项目中构建 Log Forging 预防。我使用owasp.security-logging-logback替换日志中的 CRLF 字符。

模式: %d ${LOG_LEVEL_PATTERN:-%5p} ${PID:-} --- [%15.15t] %-40.40logger{39} : %crlf(%m%ex) %n

除此之外,我们还希望通过转义正在记录的消息中存在的 HTML来添加 XSS 保护。我还没有找到在模式中引入转义 HTML 的任何方法。

log4j 具有%encode{}转换模式。SLF4J中有类似的东西吗?如果没有,您能指导我如何为此构建解决方案吗?

4

1 回答 1

0

我找不到可以与 logback 集成并对 HTML 字符进行编码的现有库或工具。所以我创建了一个自定义的 logback MessageConverter。

import org.apache.commons.text.StringEscapeUtils;
import ch.qos.logback.classic.pattern.MessageConverter;

public class HtmlContentEncoderMessageConverter extends MessageConverter {
    @Override
    public String convert(ILoggingEvent event) {
        return StringEscapeUtils.escapeHtml4(super.convert(event));
    }
}

我将此转换器添加到logback-spring.xml中的 logback 配置中,

<conversionRule conversionWord="htmlEncode" converterClass="<path_to_class>.HtmlContentEncoderMessageConverter">

最后在application.properties的日志模式中使用了这个 conversionWord ,

logging.pattern.console: %d ${LOG_LEVEL_PATTERN:-5%p} ... %crlf(%htmlEncode{%m%ex})

没有消息转换器的日志,

This is a
test quote with HTML
< testTag >.

使用crlfhtmlEncode消息转换器的日志,

This is a_test quote with HTML_&lt testTag &gt

其他尝试过的方法,

  • 我尝试使用OWASP Security Logging Logback,但 OWASP 日志记录优先于 logback,这意味着我必须将所有日志记录功能替换为 OWASP Security 日志记录功能。这需要太多的工作,所以这个方法被放弃了。
于 2021-08-16T06:40:26.300 回答