Security Maven Java EE项目中的OWASP ESAPI simpleTest
我有一个小小的JavaEE项目,我必须用OWASP ESAPI来保护它 我在Maven中集成了ESAPI,如下所示:Security Maven Java EE项目中的OWASP ESAPI simpleTest,security,jakarta-ee,maven,owasp,esapi,Security,Jakarta Ee,Maven,Owasp,Esapi,我有一个小小的JavaEE项目,我必须用OWASP ESAPI来保护它 我在Maven中集成了ESAPI,如下所示: <!-- ESAPI Version 2.0.1 --> <dependency> <groupId>org.owasp.esapi</groupId> <artifactId>esapi</artifactId> <version>2.0.1</version>
<!-- ESAPI Version 2.0.1 -->
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.0.1</version>
</dependency>
我还将ESAPI.properties
和validation.properties
复制到
src/main/resources
(我不确定它是否工作,但启动服务器时没有收到错误)
我查看了(记录得非常糟糕)并复制了示例
“为了测试ESAPI是否已成功集成和配置,
创建一个名为EsapiIntegrationTest.java的文件并粘贴到:
“如果您可以运行此文件并查看println输出,则ESAPI已
已成功安装和配置!您现在可以开始使用
ESAPI功能可保护您的web应用程序!”
我将其“翻译”为我的示例:
@ManagedBean(name="testController")
@RequestScoped
public class TestController {
public String esapiTest(){
System.out.println("ESAPI.accessController found: "
+ ESAPI.accessController());
return "ESAPI.accessController found: " + ESAPI.accessController();
}
}
我有一个文件test.xhtml
:
<?xml version="1.0" encoding="UTF-8"?>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
template="/WEB-INF/templates/default.xhtml">
<ui:define name="content">
<h2>esapi test</h2>
<h:outputText value="#{testController.esapiTest()}" />
</ui:define>
</ui:composition>
我知道-这是在我的配置中运行的
我有两个问题:我的maven和服务器启动配置正确吗?
因为错误看起来像ESAPI找不到ESAPI记录器函数 和
甚至可以在我的设置中使用简单的测试代码片段吗 (p.s.也尝试在没有maven的情况下使用它,只是包含下载的jar——但它不起作用) 我想念这样的东西:
(这来自swingset演示示例,而不是我自己的项目)
希望有人能帮忙 我只能说esapi安装正确。Esapi喜欢输出大量数据,但有趣的是:
Found in 'user.home' directory: /home/joergi/.esapi/ESAPI.properties
Loaded 'ESAPI.properties' properties file
Found in 'user.home' directory: /home/joergi/.esapi/validation.properties
Loaded 'validation.properties' properties file
Found in 'user.home' directory: /home/joergi/.esapi/ESAPI_logging_file
我认为您在项目中缺少依赖项。检查堆栈跟踪中的以下行:
Caused by: java.lang.ClassNotFoundException: org.owasp.esapi.reference.Log4JLogFactory2 from [Module "deployment.bachelor_demo.war:main" from Service Module Loader]
它可能位于错误的类加载器中,或者您可能在esapi.properties文件中为项目配置了错误的记录器
[编辑]
在ESPAI.properties文件中有以下几行:
# Log4JFactory Requires log4j.xml or log4j.properties in classpath - http://www.laliluna.de/log4j-tutorial.html
ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory
#ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory
我认为这些对你来说非常重要
除此之外,类Log4JLogFactory存在于esapi jar中,因此不应该存在真正的问题。您的类路径中有多个版本的Log4J库,这可能是由于您的应用程序正在使用另一个库的下游依赖性造成的。检查依赖关系树,找出复制库的加载位置,并将其排除在pom.xml中
mvn dependency:tree
这将显示应用程序的依赖关系树
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
log4j
log4j
将此排除添加到pom.xml中的罪魁祸首依赖项中,整个世界都应该是正确的。我浪费了一天时间试图解决此问题
ClassNotFoundException Log4JLogFactory2
。尝试查看是否有任何log4j重复依赖项,如最高评级的接受答案所示,但没有效果
最后,我意识到ESAPI首先在$HOME/.ESAPI/
文件夹中查找配置,只有当它不在那里时,它才会返回到classpath的ESAPI
文件夹。在我的例子中,问题是我刚刚部署了这个示例,正如其自述文件中所描述的,我将其配置复制到了我的主文件夹中,在该配置中,这是一行有问题的行
ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory2
然后我假设我的应用程序将从其类路径的esapi文件夹中获取配置
Log4JLogFactory2
出现在我一直在追逐的演示代码库ghost中。hi@Tom,我写道:我错过了类似(你引用的东西)的东西这是Swingset演示示例中的东西-我在我自己的项目中错过了类似的东西。。。这就是为什么我不知道它是否正确实现的原因,但是如果我像上面用maven写的那样包含ESAPI,那么它必须包含在内,或者?抱歉,我没有尝试执行您的代码。我只是想给你一个指向搜索方向的指针。我明白;)esapi的内容没有很好的文档记录。。。。IRC总是空的等等。有点沮丧。非常感谢!!!这对我帮助很大。。。现在一切都正常了。。。非常感谢你,克里斯+1、我也遇到了同样的问题。下面是SwingSet页面的链接,讨论与此答案相关的配置设置。向下滚动至“配置”。以SwingSet为例,如果您正在开发web应用程序,则可以使用。
# Log4JFactory Requires log4j.xml or log4j.properties in classpath - http://www.laliluna.de/log4j-tutorial.html
ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory
#ESAPI.Logger=org.owasp.esapi.reference.JavaLogFactory
mvn dependency:tree
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
ESAPI.Logger=org.owasp.esapi.reference.Log4JLogFactory2