我有两个模块,它们将使用具有相同属性文件的ESAPI(ESAPI和validation.properties)。
这些模块输出到耳朵中包含的战争中。
我在war文件之一中包含属性文件,这些文件在服务器启动时可以在其中找到。另一个war文件似乎运行良好,并且没有抱怨它在日志中找不到属性文件。
我正在使用ESAPI清理html和url参数-我想知道我是否还需要这些属性文件供第二个模块访问,或者因为没有配置并且所有操作都使用默认值来访问,所以我是否需要这些属性文件。
最佳答案
首先,让我描述一下ESAPI 2.x如何查找其ESAPI.properties文件。
ESAPI的SecurityConfiguration
接口的参考实现类是
org.owasp.esapi.reference.DefaultSecurityConfiguration
使用此默认实现,诸如ESAPI.properties
和Validation.properties
可以放在几个位置,按以下顺序搜索:
1)在设置了SecurityConfiguration.setResourceDirectory()
调用的目录中。例如。,
ESAPI.securityConfiguration().setResourceDirectory("C:\myApp\resources");
当然,如果使用此技术,则必须在使用ESAPI.properties(大多数是ESAPI.properties)进行任何其他ESAPI调用之前完成此技术。
2)在系统属性“org.owasp.esapi.resources
”定义的目录内。您可以在java
命令行上进行如下设置(例如):
java -Dorg.owasp.esapi.resources="C:\temp\resources" ...
您可能必须将此添加到启动Web服务器的启动脚本中。例如,对于Tomcat,在启动Tomcat的“catalina”脚本中,可以将JAVA_OPTS变量设置为上面的“-D”字符串。
3)里面
System.getProperty( "user.home" ) + "/.esapi"
目录(支持向后兼容)或
System.getProperty( "user.home" ) + "/esapi"
4)在类路径上遇到的第一个“.esapi
”或“esapi
”目录。请注意,由于Java使用多个类加载器,并且给定应用程序服务器中有多个应用程序,因此它们可能使用不同的类路径,这可能会使情况变得复杂。因此,通常不建议使用此选项,但是由于与早期ESAPI 1.4.x版本向后兼容的原因而提供此选项。
ESAPI找到可以读取的有效属性文件(例如ESAPI.properties)后,它将停止搜索其他文件。
现在,这就是说,如果要在所有.war文件中共享一个ESAPI.properties文件,我建议使用选项#2,并将System
属性“org.owasp.esapi.resources
”设置为它们都可以使用的某个通用安全目录访问。另外,您应该使用完整路径名。
关于java - 我应该在哪里找到耳内多次 war 使用的通用ESAPI.properties文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39131026/