【问题标题】:Allow angle brackets in logging output with encode wrapper允许使用编码包装器在日志输出中使用尖括号
【发布时间】:2016-01-31 06:58:19
【问题描述】:

作为 Web 应用配置的一部分,系统管理员可以编辑一个 XML 文件。在大多数情况下,它不会受到影响,但在某些情况下,格式错误的 XML 配置可能会导致问题。

在我的 Log4J appender 配置中,我有以下 PatternLayout

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %enc{%msg}%n"/>

以及在输出中包含&lt;$tag&gt;&lt;/$tag&gt; 的一对字符串,以警告用户XML 文件中特定的缺失或无效属性。但是,日志输出显示

... &lt;$tag&gt;&lt;&#x2F;$tag&gt; tags in $XML.xml are properly defined ...

上面有PatternLayout

有没有办法转义尖括号,以便它们按预期显示在日志中?

【问题讨论】:

  • 你为什么使用%enc
  • 因为未来的可能性之一包括在 Web 控制台中公开日志信息。它是几个系统管理员要求的功能。根据文档,使用 %enc 有助于防止可能的 XSS 攻击向量。
  • @Jason 所以你想编码它,而不是编码它?
  • 特定字符,如尖括号。

标签: java xml log4j log4j2


【解决方案1】:

您通过%enc{} 告诉它这样做:

https://logging.apache.org/log4j/2.x/manual/layouts.html

具体来说:

&, , ", ', / 替换为对应的HTML实体

如果您需要在浏览器中查看它们,请在发送至浏览器的途中对消息进行编码。日志是您的记录系统,视图(或视图的路径)应该是改变它的原因。

另一种解决方案是使用equals{pattern}{test}{substitution} 替换尖括号。我的直觉反应是不这样做。如果一个系统不能安全地查看日志,那么这个系统应该负责解决这个问题——这是一个众所周知的问题,有一个众所周知的解决方案。

【讨论】:

  • 正确。有没有办法为尖括号或任何其他字符转义这个?
  • @Jason 使用equals{}{}{},但是......我仍然会在前往视图层的路上进行编码。当然,我对此可能是错的。我更愿意准确记录我认为我正在存储的内容,如果系统无法安全地查看它,请在该系统中修复它。
  • 这就是我的想法,但如果有其他可能性,我很感兴趣。
猜你喜欢
  • 1970-01-01
  • 2021-03-23
  • 2012-12-20
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多