OWASP ESAPI 和 SLF4J/Logback 设置
OWASP ESAPI and SLF4J/Logback setup
我目前有一个程序使用 SLF4J/LoggerFactory 来捕获日志,配置是通过 logback.xml 完成的。我的日志按预期工作。最近,安全团队在我的工作中指示我更新使用 ESAPI 的 class。我更新了 class 并将 ESAPI.properties
和 validation.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 的依赖项。
我目前有一个程序使用 SLF4J/LoggerFactory 来捕获日志,配置是通过 logback.xml 完成的。我的日志按预期工作。最近,安全团队在我的工作中指示我更新使用 ESAPI 的 class。我更新了 class 并将 ESAPI.properties
和 validation.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 程序为 运行.
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 的依赖项。