22

我正在尝试使用 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
4

10 回答 10

25

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/参考/DefaultSecurityConfiguration.java

于 2011-10-08T15:19:18.210 回答
4

我自己只是在这个过程中挣扎。

  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。

当我从 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。那是完整的完整文件。

于 2014-10-07T18:54:52.320 回答
3

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

-Dorg.owasp.esapi.resources="path\to\project\root\resources"
于 2014-06-09T13:52:25.307 回答
2

参考 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 的“catalina”脚本中,可以将 JAVA_OPTS 变量设置为上面的 -D 字符串。

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

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

于 2016-03-09T15:54:06.133 回答
0

你能把你的文件(用这个名字)放在:

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

并再次向我们展示内容和异常。

于 2011-10-08T11:29:42.140 回答
0

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

您会发现 ESAPI.properties 文件的副本位于“configuration/esapi”下。

于 2011-10-09T05:12:08.237 回答
0
  1. 提取esapi jar
  2. 在下创建一个名为 resources 的文件夹org.owasp.esapi
  3. 复制ESAPI.propertiesorg.owasp.esapi.resources
  4. 构建和部署
于 2014-06-26T20:22:57.413 回答
0

提取资源文件夹下的jar添加属性文件。

最初得到同样的错误,更新属性文件后它对我有用

于 2014-09-30T12:21:24.150 回答
0

感谢您提供信息

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

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

于 2016-01-15T20:36:59.673 回答
0

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

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

于 2018-01-17T20:28:15.030 回答