OWASP ESAPI 和 SLF4J/Logback 设置

OWASP ESAPI and SLF4J/Logback setup

我目前有一个程序使用 SLF4J/LoggerFactory 来捕获日志,配置是通过 logback.xml 完成的。我的日志按预期工作。最近,安全团队在我的工作中指示我更新使用 ESAPI 的 class。我更新了 class 并将 ESAPI.propertiesvalidation.properties 添加到 src/main/resources/esapi。在 ESAPI.properties 中,我将 ESAPI.Logger 更新为 ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory。根据我的在线研究和通过 SO,我假设我可以正常使用我的日志(初始化为 protected final static Logger log = LoggerFactory.getLogger(this.class); 并用作 log.info("Example"))(将日志输出到服务器上的文件) 但当 java 程序为 运行.

时,日志仅输出到 CL

LogFactory 的配置指示应委托给哪个 Logging Framework 实例 org.owasp.esapi.Logger。

根据您的问题,您似乎希望日志事件遵循以下流程:

MyCode -> SLF4J -> ESAPI -> 控制台。

实际上,它的实现方式是:
MyCode -> ESAPI_LOGGER -> SLF4J -> 控制台

ESAPI 记录器不是 SLF4J 记录合同的实现。它只会委托给 esapi.properties 中配置的记录器实例。代码中的所有引用都需要更新为

Logger esapiLogger = ESAPI.getLogger(myLogger_byClass_or_byName)

ESAPI.properties 文件中还有这些相关属性,您可能希望对其进行调整:

# ESAPI Logging
# Set the application name if these logs are combined with other applications
Logger.ApplicationName=ExampleApplication
# If you use an HTML log viewer that does not properly HTML escape log data, you can set LogEncodingRequired to true
Logger.LogEncodingRequired=false
# Determines whether ESAPI should log the application name. This might be clutter in some single-server/single-app environments.
Logger.LogApplicationName=true
# Determines whether ESAPI should log the server IP and port. This might be clutter in some single-server environments.
Logger.LogServerIP=true
# Determines whether ESAPI should log the user info.
Logger.UserInfo=true
# Determines whether ESAPI should log the session id and client IP.
Logger.ClientInfo=true

如果您使用的是 slf4j 库,我在阅读 README.md for the current release which references the 2.2.3.0 release notes 后解决了我的问题。我需要排除引入的 slf4j-simple,因为它是 AntiSamy 1.6.2 的依赖项。