尝试使用ESAPI但收到错误

时间:2011-10-08 11:17:03

标签: java security web-applications esapi

我正在尝试使用ESAPI.jar为我的Web应用程序提供安全性。基本上我刚开始使用ESAPI.jar。 但问题是我无法使用ESAPI运行一个简单的程序。 小代码片段是:

String clean = ESAPI.encoder().canonicalize("someString");
Randomizer r=ESAPI.randomizer();    
System.out.println(r);
System.out.println(clean);

我收到此错误:

Attempting to load ESAPI.properties via file I/O.
Attempting to load ESAPI.properties as resource file via file I/O.
Not found in 'org.owasp.esapi.resources' directory or file not readable: D:\Eclipse-Workspace\Test\ESAPI.properties
Not found in SystemResource Directory/resourceDirectory: .esapi\ESAPI.properties
Not found in 'user.home' (C:\Documents and Settings\user.user) directory: C:\Documents and Settings\user.user\esapi\ESAPI.properties
Loading ESAPI.properties via file I/O failed. Exception was: java.io.FileNotFoundException
Attempting to load ESAPI.properties via the classpath.
ESAPI.properties could not be loaded by any means. Fail. Exception was: java.lang.IllegalArgumentException: Failed to load ESAPI.properties as a classloader resource.
Exception in thread "main" org.owasp.esapi.errors.ConfigurationException: java.lang.reflect.InvocationTargetException SecurityConfiguration class (org.owasp.esapi.reference.DefaultSecurityConfiguration) CTOR threw exception.
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:129)
    at org.owasp.esapi.ESAPI.securityConfiguration(ESAPI.java:184)
    at org.owasp.esapi.ESAPI.encoder(ESAPI.java:99)
    at org.rancore.testJasp.TestEsapi.main(TestEsapi.java:59)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.owasp.esapi.util.ObjFactory.make(ObjFactory.java:86)
    ... 3 more
Caused by: org.owasp.esapi.errors.ConfigurationException: ESAPI.properties could not be loaded by any means. Fail.
    at org.owasp.esapi.reference.DefaultSecurityConfiguration.loadConfiguration(DefaultSecurityConfiguration.java:439)
    at org.owasp.esapi.reference.DefaultSecurityConfiguration.<init>(DefaultSecurityConfiguration.java:227)
    at org.owasp.esapi.reference.DefaultSecurityConfiguration.getInstance(DefaultSecurityConfiguration.java:75)
    ... 8 more
Caused by: java.lang.IllegalArgumentException: Failed to load ESAPI.properties as a classloader resource.
    at org.owasp.esapi.reference.DefaultSecurityConfiguration.loadConfigurationFromClasspath(DefaultSecurityConfiguration.java:667)
    at org.owasp.esapi.reference.DefaultSecurityConfiguration.loadConfiguration(DefaultSecurityConfiguration.java:436)
    ... 10 more

我尝试在源文件夹中复制3个ESAPI属性文件,并在构建路径上配置它们但仍然没有成功。我尝试了许多排列和组合无济于事。

请指导我。

属性文件的内容是:

# User Messages
Error.creating.randomizer=Error creating randomizer

This.is.test.message=This {0} is {1} a test {2} message

# Validation Messages

# Log Messages

10 个答案:

答案 0 :(得分:22)

ESAPI.properties文件中应包含3行以上的行。例如见:

https://web.archive.org/web/20150904064147/http://code.google.com:80/p/owasp-esapi-java/source/browse/trunk/configuration/esapi/ESAPI.properties

根据我的经验,ESAPI.properties文件需要与esapi.jar位于同一文件夹中,或者需要编译到资源目录中的jar中。

/resources/ESAPI.properties

我相信任何一个都应该奏效。如果ESAPI找不到该文件,则在其他位置查找该文件。

该代码在第620行附近:

https://web.archive.org/web/20161005210258/http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/reference/DefaultSecurityConfiguration.java

答案 1 :(得分:3)

我自己就是在努力解决这个问题。

  1. 我在我的C:/ users / myname /目录中创建了一个名为esapi的文件夹,并加载了ESAPI.properties,validation.properties和ESAPI-AccessControlPolicy.xml,它让我超越了所有未查找文件的错误。 ESAPI在几个地方查找文件。我顺便运行Windows 7 64位。
  2. 然后我不得不更新一些罐子。我应该从一开始就这样做,但我不知道。我收到了这个错误: AccessController类(org.owasp.esapi.reference.DefaultAccessController)CTOR抛出异常。 对于每个需要更新版本的jar,如commons集合或log4j。在堆栈跟踪的底部,它将引用有问题的jar。
  3. 当我从esapi lib目录中添加新的jar时,一切正常!

    我在控制台的最后收到了这条消息:

    ESAPI.accessController found: org.owasp.esapi.reference.DefaultAccessController@1cb8deef
    

    注意:有一个ESAPI_en_US.properties文件,但它只有几行。只需使用以下文件:\ esapi-2.1.0-dist \ src \ test \ resources \ esapi \ ESAPI.properties。这是完整的完整文件。

答案 2 :(得分:1)

遇到这个问题并查看安装文档(esapi-xxx-dist \ documentation \ esapi4java-core-xx-install-guide.pdf)后,我找到了一个非常有用的部分,详细说明了属性文件可以在任何地方,提供了一个vm标志(-Dorg.owasp.esapi.resources=path")指向特定目录。 例如,如果我将文件粘贴在项目目录根目录下的“resources”文件夹中,则标志为:

-Dorg.owasp.esapi.resources="path\to\project\root\resources"

答案 3 :(得分:1)

参考SecurityConfiguration管理ESAPI在一个地方使用的所有设置。在此参考实现中,可以将资源放在多个位置,按以下顺序搜索:

1)在通过调用SecurityConfiguration.setResourceDirectory(“C:\ temp \ resources”)设置的目录中。

2)在System.getProperty(“org.owasp.esapi.resources”)目录中。您可以在java命令行中设置它,如下所示(例如):

            java -Dorg.owasp.esapi.resources="C:\temp\resources"

您可能必须将此添加到启动Web服务器的启动脚本中。例如,对于Tomcat,在启动Tomcat的“ca​​talina”脚本中,您可以将JAVA_OPTS变量设置为上面的-D字符串。

3)在System.getProperty(“user.home”)+“/。esapi”目录内(支持向后兼容)或System.getProperty(“user.home”)+“/ esapi”目录内。

4)类路径上的第一个“.esapi”或“esapi”目录。 (前者是为了向后兼容。)

答案 4 :(得分:0)

您可以将您的文件(使用此名称)放入:

D:\Eclipse-Workspace\Test\ESAPI.properties

再次向我们展示内容和例外。

答案 5 :(得分:0)

查看“src / examples / scripts”下的各种脚本,它们将向您显示一种控制ESAPI.properties文件所在位置的简便方法。 (这适用于ESAPI 2.0或更高版本。)

您会在'configuration / esapi'下找到ESAPI.properties文件的副本。

答案 6 :(得分:0)

  1. 提取esapi jar
  2. org.owasp.esapi
  3. 下创建名为resources的文件夹
  4. ESAPI.properties复制到org.owasp.esapi.resources
  5. 构建和部署

答案 7 :(得分:0)

提取罐子 在资源文件夹下添加属性文件。

最初得到相同的错误,更新了它为我工作的属性文件

答案 8 :(得分:0)

感谢您提供信息

  

-Dorg.owasp.esapi.resources =&#34;路径\到\项目\根\资源&#34;

这是一个很好的信息来源,并解决了我的问题

答案 9 :(得分:0)

我也有同样的问题。我用一点James Drinkard解决方案解决了这个问题。我基本上做的是创建一个名为ESAPI的新文件夹,并添加了ESAPI.properties文件,Validation.properties和ESAPI-AccessControlPolicy.xml。并将其存档到一个jar文件中并添加到WebContet / WEB-INF下的lib文件夹中,并将其构建到路径中并且它可以工作。

*要将其存档到jar文件中,我使用了windows命令移动ESAPI ESAPI.jar