【问题标题】:How to avoid CRLF (Carriage Return and Line Feed) in Logback - CWE 117如何在 Logback 中避免 CRLF(回车和换行) - CWE 117
【发布时间】:2015-01-15 17:22:28
【问题描述】:

我正在使用 Logback,并且在记录用户参数时需要避免使用 CRLF(回车换行)。
我尝试在静态地图 PatternLayout.defaultConverterMap 上添加我的扩展 ClassicConverter 的类,但它没有用。

谢谢,

【问题讨论】:

  • CRLF 是从哪里来的?你如何记录这个?你的图案是什么样的?

标签: security logback carriage-return linefeed log-forging


【解决方案1】:

您应该按照logback documentation 中的说明创建自定义布局

自定义布局:

package com.foo.bar;

import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;

public class RemoveCRLFLayout extends PatternLayout {

    @Override
    public String doLayout(ILoggingEvent event) {
        return super.doLayout(event).replaceAll("(\\r|\\n)", "");
    }

}

Logback 配置:

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
    <layout class="com.foo.bar.RemoveCRLFLayout">
        <pattern>%d %t %-5p %logger{16} - %m%n</pattern>
    </layout>
</encoder>

【讨论】:

    【解决方案2】:

    ch.qos.logback.core.CoreConstants;

    public static final String LINE_SEPARATOR = System.getProperty("line.separator");
    

    ch.qos.logback.classic.pattern.LineSeparatorConverter:

    public String convert(ILoggingEvent event) {
        return CoreConstants.LINE_SEPARATOR;
    }
    

    package ch.qos.logback.classic.PatternLayout:

        defaultConverterMap.put("n", LineSeparatorConverter.class.getName());
    

    所以确保固定行结束的正确方法是属性line.separator

    java.lang.System.lineSeparator() 的实现相同:

    lineSeparator = props.getProperty("line.separator");
    

    【讨论】:

      【解决方案3】:

      为了快速解决问题,我们在模式中使用了%replace 表达式来替换消息中的换行和回车。

      请注意,此示例使用 Spring Boot 属性来设置模式,但您可以以相同方式在 Logback 配置文件中使用 %replace。

      logging:
        pattern:
          console: "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %replace(%msg){'\n|\r', '_'}%n"
      

      (自定义转换器本来是我的首选,但我无法让它与 Spring Boot 和 Spring Cloud Config 一起使用。如果您想了解有关该方法的更多信息,请在 logback 文档中搜索conversionRule。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-21
        • 2019-09-06
        • 2017-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多