我一直在尝试评估OWASP ESAPI库,但一直有问题只是让它正确初始化。我为ESAPI.properties和validation.properties设置了一个资源文件夹,这些文件夹从类路径加载而没有问题。但是,antisamy-esapi.xml文件没有从classpath加载,我发现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(),它现在似乎正常工作。
答案 0 :(得分:1)
我设法通过为esapi资源添加以下行来使其工作:
System.setProperty("org.owasp.esapi.resources", "src/main/resources");
DefaultSecurityConfiguration.java
至少现在我可以使用instance.getValidSafeHTML
但是,当部署到Web服务器时,它不会工作。我想补丁需要加载antisamy-esapi.xml
以从类路径加载。