首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个set项目esapi错误:未通过ESAPI验证配置设置所选类型

两个set项目esapi错误:未通过ESAPI验证配置设置所选类型
EN

Stack Overflow用户
提问于 2021-11-16 16:15:10
回答 2查看 124关注 0票数 0

我有一个WAS9服务器,有两个不同的web应用程序,每个都有ESAPI2.1库及其ESAPI.properties和validation.properties文件:

代码语言:javascript
复制
A\webcontent\web-inf\esapi\ESAPI.properties
A\webcontent\web-inf\esapi\validation.properties
B\webcontent\web-inf\esapi\ESAPI.properties
B\webcontent\web-inf\esapi\validation.properties

在应用程序B中,validation.properties文件具有不在应用程序A中的验证,当应用程序B单独正常工作时,但当两个应用程序在一起时,B应用程序获取A的属性文件,并且不加载其验证,因此它会给出错误。

我测试更改B将属性文件移动到"src\esapi“和"src\org\owasp\esapi\resources”中,但总是出现相同的错误

选定的类型不是通过ESAPI验证配置设置的

代码语言:javascript
复制
java.lang.IllegalArgumentException: The selected type was not set via the ESAPI validation configuration
at org.owasp.esapi.reference.DefaultValidator.getValidInput(DefaultValidator.java:208)
at org.owasp.esapi.reference.DefaultValidator.getValidInput(DefaultValidator.java:185)

我的web.xml:

代码语言:javascript
复制
<context-param>
    <param-name>esapiProperties</param-name>
     <param-value>/esapi/ESAPI.properties</param-value>
</context-param>   
<context-param>
     <param-name>validationEsapiProperties</param-name>
     <param-value>/esapi/validation.properties</param-value>
</context-param>

或者:

代码语言:javascript
复制
<context-param>
  <param-name>esapiProperties</param-name>
  <param-value>/org/owasp/esapi/resources/ESAPI.properties</param-value>
</context-param>   

<context-param>
    <param-name>validationEsapiProperties</param-name>
    <param-value>/org/owasp/esapi/resources/validation.properties</param-value>
</context-param>
EN

回答 2

Stack Overflow用户

发布于 2021-11-17 16:06:41

您正在尝试的用例与最初的项目维护者所做的设计选择是相反的。因为它们将所有ESAPI类实现为单例,所以您不能在同一运行时实例中实例化两个不同的ESAPI实例,在本例中是您的websphere实例。这是一个典型的竞争条件,第一个加载资源的应用程序就是获胜的应用程序。我认为这个决定在一定程度上是对这样一个事实的回应,即该库的编写是为了修复损坏的网站,在这种情况下,单例有助于确保加载的是您的。

目前唯一的解决方案--是不理想的。一种是将所有验证合并到一个实例中,另一种是将不同的应用程序部署到Websphere的不同实例中。

ESAPI 3.X是我期望看到一个更有意义的默认值的时候。

票数 0
EN

Stack Overflow用户

发布于 2021-11-30 17:54:33

假设ESAPI 2.1.0和一个典型的Eclipse动态web应用程序带有src文件夹:

  • 将ESAPI属性文件(ESAPI和验证)移动到src/esapi中,并在web.xml中设置自定义的任何关于ESAPI属性的引用(它没有任何效果)
  • 创建一个扩展DefaultSecurityConfiguration类的类,覆盖getResourceStream方法(signature InputStream getResourceName(字符串文件名)),并从应用程序类加载器返回资源流。计算文件名参数是必要的,因为“配置/验证文件加载”使用相同的方法(可能使用filename.indexOf("validation"))
  • Create类(使用实现javax.servlet.Filter),在每次请求时调用(在doFilter中) ESAPI.override()。您必须在web.xml中声明新的筛选器(根据需要映射请求)。

如果需要更多信息,请查看javadoc注解in override method

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69992603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档