【问题标题】:OWASP ESAPI and SLF4J/Logback setupOWASP ESAPI 和 SLF4J/Logback 设置
【发布时间】:2021-12-28 02:44:50
【问题描述】:

我目前有一个程序使用 SLF4J/LoggerFactory 来捕获日志,配置是通过 logback.xml 完成的。我的日志按预期工作。最近,安全团队在我的工作中指示我更新一个使用 ESAPI 的类。我更新了课程并将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。

【问题讨论】:

  • 我将从这里开始:github.com/ESAPI/esapi-java-legacy/wiki/Using-ESAPI-with-SLF4J 这里有一些重要的日志配置消息:github.com/ESAPI/esapi-java-legacy/blob/develop/documentation/… 这可能会有所帮助。我们默认由程序员进行日志配置:ESAPI 只需要知道要使用什么框架并假设您已经相应地配置了它。我怀疑在 ESAPI 实例化记录器和您已经在应用程序中加载它之间存在 RACE。 ESAPI 必须是第一位的。
  • 感谢您的反馈!如果我的logback.xml 文件中有我需要的所有配置,我是否需要在ESAPI.properties 中声明除ESAPI.Logger=org.owasp.esapi.logging.slf4j.Slf4JLogFactory 之外的任何内容。我收到的命令行日志表明,在我的程序运行之前,ESAPI.propertiesvalidation.properties 已成功加载。那会排除种族问题吗?如果没有,我将如何解决?谢谢!
  • Jeremiah 实际上回答了您的问题:您需要将编码引用更改为 ESAPI 而不是 slf4j。我的猜测是消除了 RACE 条件,因为如果所有日志调用都是 ESAPI,那么 slf4j 无法实例化,除非通过 ESAPI。没有更好的解决方案:不幸的是,ESAPI 被编码为单例,因此如果您想找到一种同时运行两者的方法,您将只能靠自己。

标签: java logging logback slf4j esapi


【解决方案1】:

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

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

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

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

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

Logger esapiLogger = ESAPI.getLogger(myLogger_byClass_or_byName)

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-11
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 2016-11-02
        相关资源
        最近更新 更多