我一直在尝试评估OWASP ESAPI库,但在正确初始化它时遇到了问题。我为ESAPI.properties和validation.properties设置了一个资源文件夹,这些都是从类路径加载的,没有问题。然而,antisamy-sapi.xml文件不是从类路径加载的,我发现2010年的一个bug提到了这一点。我得到的错误是:
正在尝试通过文件I/O将antisamy-sapi.xml加载为资源文件。在"org.owasp.esapi.resources"目录中找不到,或文件不可读:C:\Users\mydir\resin-pro-4.0.27\antisamy-sapi.xml在系统资源目录/resourceDirectory:.esapi\antisamy-sapi.xml中找不到在"user.home"(C:\Users\mydir)目录中找不到:C:\Users\mydir\esapi\antisamy-sapi.xml
我正在使用这个库将应用程序部署到resin。我已经尝试过手动将xml文件放置在上面的所有位置,唯一最终起作用的是我的主目录,它对于生产部署来说不太好用。
我还遵循了在其他地方找到的一个建议,该建议说要设置-Dorg.owasp.sapi.resources属性。这也不起作用,但更有趣的是,错误没有改变,这让我认为由于某种原因,设置没有被选中。
有没有关于这个文件需要在我的项目中定位的指针,以便在部署到容器后正确加载?
提前谢谢。
更新:
因此,从代码中挖掘出来,似乎有专门的函数用于加载ESAPI.properties,这就是为什么该文件能够从部署到容器的标准资源(或任何其他src-dir)目录中加载的原因。但是antisamy-sapi.xml的加载函数只是检查user.home下的一个特定目录,一个配置的自定义目录,或者通过ClassLoader.getSystemResource()的结果。不确定为什么这些例程是单独的。经过数小时的处理,我失去了耐心,复制了DefaultSecurityConfiguration.java,并更正了getResourceFile()方法,使其使用与loadConfigurationFromClasspath()相同的查找代码。然后我用这个类调用ESAPI.override(),它现在似乎可以正常工作了。
我为esapi资源添加了以下行,从而使其正常工作:
System.setProperty("org.owasp.esapi.resources", "src/main/resources");
DefaultSecurityConfiguration.java
至少现在我可以使用instance.getValidSafeHTML
然而,当部署到web服务器时,它不会工作。我想补丁是从类路径加载antisamy-esapi.xml
所必需的。