在 logback 中转义 HTML
Escape HTML in logback
我们有一个 Spring 项目将 Logback 与 SLF4J 结合使用。我一直致力于在我们的项目中构建 Log Forging 预防。我已经使用 owasp.security-logging-logback 来替换日志中的 CRLF 字符。
pattern: %d ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %crlf(%m%ex) %n
除此之外,我们还想通过 转义记录消息中存在的 HTML 来添加 XSS 保护。我一直没能找到任何在模式中引入转义 HTML 的方法。
log4j 具有 %encode{} 转换模式。 SLF4J 中有类似的东西吗?
如果没有,您能指导我如何为此构建解决方案吗?
我找不到可以与 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 >.
使用 crlf 和 htmlEncode 消息转换器进行记录,
This is a_test quote with HTML_< testTag >
其他尝试过的方法,
- 我尝试使用 OWASP Security Logging Logback,但是 OWASP 日志记录优先于 logback,这意味着我必须用 OWASP 安全日志记录函数替换所有日志记录函数。这需要太多的工作,所以这个方法被放弃了。
我们有一个 Spring 项目将 Logback 与 SLF4J 结合使用。我一直致力于在我们的项目中构建 Log Forging 预防。我已经使用 owasp.security-logging-logback 来替换日志中的 CRLF 字符。
pattern: %d ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %crlf(%m%ex) %n
除此之外,我们还想通过 转义记录消息中存在的 HTML 来添加 XSS 保护。我一直没能找到任何在模式中引入转义 HTML 的方法。
log4j 具有 %encode{} 转换模式。 SLF4J 中有类似的东西吗? 如果没有,您能指导我如何为此构建解决方案吗?
我找不到可以与 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,
的日志模式中使用了这个 conversionWordlogging.pattern.console: %d ${LOG_LEVEL_PATTERN:-5%p} ... %crlf(%htmlEncode{%m%ex})
没有消息转换器的日志,
This is a
test quote with HTML
< testTag >.
使用 crlf 和 htmlEncode 消息转换器进行记录,
This is a_test quote with HTML_< testTag >
其他尝试过的方法,
- 我尝试使用 OWASP Security Logging Logback,但是 OWASP 日志记录优先于 logback,这意味着我必须用 OWASP 安全日志记录函数替换所有日志记录函数。这需要太多的工作,所以这个方法被放弃了。