我们可以向 ESAPI Slf4JLogFactory 记录器添加标记吗

Can we add markers to ESAPI Slf4JLogFactory logger

因此对于普通 sl4j 日志记录,他们确实提供了添加标记的选项。

Map<String, Object> markers = new HashMap<>();
markers.put("name", "value");
log.info(markers,"Some value");

但出于安全原因,代码库使用了org.owasp.esapi.logging.slf4j.Slf4JLogFactory 这就像

private static final Logger LOG = ESAPI.getLogger(Some.class);
LOG.info(Some event type, some string....)

我想在这里添加一个标记,这样就不会损害 esapi 提供的安全性。任何帮助都会很棒。互联网上没有关于此的内容。

我发现了多个问题。其中有:

  1. ESAPI 记录器的 3 个实现(so,JUL、Log4J 1 和 SLF4J)都共享相同的 org.owasp.esapi.Logger 接口,但据我所知,只有 SLF4J 支持标记。
  2. ESAPI 然后必须检查所有标记的 name/value 对,并尝试确保来自任何 name/value 对的日志注入或 XSS,包括任何潜在对象不能注入有害的东西进入日志流。 (这就是 'safe logging' 应该的样子。)
  3. 即使我们允许这样做,第一个参数仍然必须是 Logger.EventType。目前还不清楚应该使用什么事件类型,或者是否需要创建一个特殊的事件类型(例如,EVENT_MARKER)。

所以,我要明确地说,我们不会为任何 ESAPI 2.x 版本考虑这一点,但我们可能会为我们目前正在计划的 ESAPI 3 考虑这一点。如果您想在那里看到它,请将 GitHub 问题添加到 https://github.com/ESAPI/esapi-java/issues 并将其记为功能请求。(在 ESAPI 3 中这可能是合理的,因为我们可能只在那里支持 SLF4J。)