【问题标题】:antisamy-esapi.xml not found when trying to use OWASP ESAPI尝试使用 OWASP ESAPI 时未找到 antisamy-esapi.xml
【发布时间】:2012-08-14 09:25:03
【问题描述】:

我一直在尝试评估 OWASP ESAPI 库,但在正确初始化它时遇到了问题。我为 ESAPI.properties 和 validation.properties 设置了一个资源文件夹,它们是从类路径加载的,没有问题。但是 antisamy-esapi.xml 文件不是从类路径加载的,我发现 2010 年的一个错误提到了这一点。我得到的错误是:

尝试通过文件 I/O 将 antisamy-esapi.xml 作为资源文件加载。 在“org.owasp.esapi.resources”目录中找不到或文件不可读:C:\Users\mydir\resin-pro-4.0.27\antisamy-esapi.xml 在 SystemResource Directory/resourceDirectory 中找不到:.esapi\antisamy-esapi.xml 在 'user.home' (C:\Users\mydir) 目录中找不到:C:\Users\mydir\esapi\antisamy-esapi.xml

我正在使用此库将应用程序部署到树脂。我已经尝试将 xml 文件手动放置在上面的所有位置,最终唯一有效的是我的主目录,它不适用于生产部署。

我还遵循了在其他地方找到的建议设置 -Dorg.owasp.esapi.resources 属性。这也不起作用,但更有趣的是错误并没有改变,这让我认为该设置由于某种原因没有被选中。

关于此文件需要在我的项目中的位置的任何指针,以便在部署到容器后正确加载?

提前致谢。

更新:

所以从代码的挖掘来看,似乎有专门的函数来加载 ESAPI.properties,这就是为什么该文件能够从部署到容器的标准资源(或任何其他 src 目录)目录加载的原因.然而,antisamy-esapi.xml 的加载函数只是检查 user.home 下的特定目录、配置的自定义目录或通过 ClassLoader.getSystemResource() 的结果。不知道为什么这些例程是分开的。经过几个小时的处理,我失去了耐心,复制了 DefaultSecurityConfiguration.java 并更正了 getResourceFile() 方法以使用与 loadConfigurationFromClasspath() 相同的查找代码。然后我用这个类调用 ESAPI.override() ,它现在似乎可以正常工作了。

【问题讨论】:

  • esapi 的文档警告不要在生产代码中使用 ESAPI.override() 方法。应该为将来的问题搜索者注意这一点。
  • java 属性应该已经工作了,你是否能够通过日志来验证网络服务器是否选择了它?如果您在本地运行,则可以通过使用 procexp 之类的工具检查服务器进程来查看该属性是否已通过。
  • 这里是相关的reference

标签: java resources owasp esapi


【解决方案1】:

我设法通过为 esapi 资源添加以下行来使其工作:

System.setProperty("org.owasp.esapi.resources", "src/main/resources");

DefaultSecurityConfiguration.java

至少现在我可以使用instance.getValidSafeHTML

但是,当一个部署到 Web 服务器时它不会工作。我猜这个补丁需要加载antisamy-esapi.xml才能从类路径加载。

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 2015-04-19
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2011-12-03
    • 2014-08-15
    相关资源
    最近更新 更多