【问题标题】:Trying to Use ESAPI But getting Error尝试使用 ESAPI 但出现错误
【发布时间】:2011-12-03 12:42:45
【问题描述】:

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

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

【问题讨论】:

    标签: java security web-applications esapi


    【解决方案1】:

    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

    【讨论】:

    • 是的,他抓错了文件。请参阅下面的解释。
    • 链接已损坏。您能否在答案中添加这 3 行。
    • @AniketThakur:他并不是说你需要有 3 行。他只是说无论如何它都需要超过 3 行。再次检查链接,我已通过 archive.org 修复它们 - 所以应该清楚最初的意思。
    【解决方案2】:

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

    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。这是完整的完整文件。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        参考 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”目录。 (前者是为了向后兼容。)

        【讨论】:

        • 从 Github 存储库添加文件后,设置属性对我有用。就我而言,我使用了:CATALINA_OPTS="-Xmx2048m -serve -Dorg.owasp.esapi.resources=/usr/local/tomcat
        【解决方案5】:

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

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

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

        【讨论】:

        • 我已经这样做了...我遇到了同样的异常。我假设您想要属性文件的内容..即 # 用户消息 Error.creating.randomizer=创建随机器时出错 This.is.test.message=此 {0} 是 {1} 测试 {2} 消息 #验证消息 # 日志消息
        • 文件的名称是确切地 ESAPI.properties(大小写相同等等...)?是的,这是一个愚蠢的问题,但有时我们创建了一个错误的文件,直到最后我们才能看到。
        • 是的,该文件的名称完全相同...绝对没有打错。:)
        【解决方案6】:
        1. 提取 esapi jar
        2. org.owasp.esapi下创建一个名为resources的文件夹
        3. ESAPI.properties复制到org.owasp.esapi.resources
        4. 构建和部署

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

            感谢提供信息

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

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

            【讨论】:

              【解决方案9】:

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

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

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                • 这些中的任何一个都显示了如何使这个加载更快?它现在太慢了。如果我可以将其配置为不尝试 4 个不同的文件系统位置,那就太好了......
                • 你对慢的定义是什么?在我实现了 ESAPI 的每个应用程序中,人类可以在属性加载所需的时间内眨眼。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-11-13
                • 2011-07-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-11
                相关资源
                最近更新 更多