java调用esapi-jar包测试最佳实践

xingyun86 2021-1-24 2266

java调用esapi-jar包测试最佳实践

近日,有老友说到使用esapi遇到一些运行问题求助于我。解决后备注记录个日志。

错误信息如下:

.lang.IllegalArgumentException; exception message 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:185)      
        at org.owasp.esapi.ESAPI.encoder(ESAPI.java:101)
        at esapi_demo.App.main(App.java:15)

使用vscode+gradle创建了esapi_demo工程:

1.mkdir esapi_demo

2.cd esapi_demo

3.gradle init

4.(选中 java-application,其余默认即可)

5.工程创建完毕,配置build.gradle,添加依赖信息:

添加依赖:https://mvnrepository.com/artifact/org.owasp.esapi/esapi

dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:29.0-jre'
    // https://mvnrepository.com/artifact/org.owasp.esapi/esapi
    compile group: 'org.owasp.esapi', name: 'esapi', version: '2.2.2.0' //新增
    // https://mvnrepository.com/artifact/javax.servlet/jsp-api
    compile group: 'javax.servlet', name: 'jsp-api', version: '2.0' //新增
    // https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
    compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' //新增
    // Use JUnit test framework
    testImplementation 'junit:junit:4.13'
}
application {
    // Define the main class for the application.
    mainClassName = 'esapi_demo.App'
}
//新增,编译会将dependencies compile选项库一起打包到jar包,同时manifest设定默认主类入口函数
jar {
    manifest {
        attributes 'Main-Class': "esapi_demo.App"
    }
    from {
        //添加依懒到打包文件
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

6.编写测试代码

/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package esapi_demo;
import java.util.logging.Logger;
import org.owasp.esapi.ESAPI;
public class App {
    public String getGreeting() {
        return "Hello world.";
    }
    public static void main(String[] args) {
        System.out.println(new App().getGreeting()); 
        String safe = ESAPI.encoder().encodeForHTML("<script>alert('xss')</script>");		
        System.out.println(safe);
        String input = "<p>test <b>this</b> <script>alert(document.cookie)</script><i>right</i> now</p>";
        Logger logger = Logger.getAnonymousLogger();
        try {
            String safe2 = ESAPI.validator().getValidSafeHTML("get safe html", input, java.lang.Integer.MAX_VALUE, true);
            logger.info("getValidSafeHTML:" + safe2);
            System.out.println(safe2);
        } catch (org.owasp.esapi.errors.ValidationException e) {            
            logger.warning("error" + e);
        }
    }
}

7.编译

gradle build

8.运行

gradle run

此时同上错误信息

9.根据错误信息,缺少配置文件

根据esapi官网说明

https://owasp.org/www-project-enterprise-security-api/#div-shouldiuseesapi

下载配置文件

https://github.com/ESAPI/esapi-java-legacy/releases/tag/esapi-2.2.2.0

下载完成后,解压并拷贝esapi-2.2.2.0-configuration.jar\configuration\esapi目录下所有配置文件及目录到esapidemo\src\main\resources目录下即可.

10.再次编译

gradle build

11.再次运行

gradle run

运行正常

PS D:\DevelopmentEnvironment\Workspaces\JavaProjects\esapi_demo\build\libs>java -jar .\esapi_demo.jar
Hello world.
ESAPI: WARNING: System property [org.owasp.esapi.opsteam] is not set
ESAPI: WARNING: System property [org.owasp.esapi.devteam] is not set
ESAPI: Attempting to load ESAPI.properties via file I/O.
ESAPI: Attempting to load ESAPI.properties as resource file via file I/O.
ESAPI: Not found in 'org.owasp.esapi.resources' directory or file not readable: D:\DevelopmentEnvironment\Workspaces\JavaProjects\esapi_demo\build\libs\ESAPI.properties
ESAPI: Not found in SystemResource Directory/resourceDirectory: .esapi\ESAPI.properties
ESAPI: Not found in 'user.home' (C:\Users\XINGYUN) directory: C:\Users\XINGYUN\esapi\ESAPI.properties
ESAPI: Loading ESAPI.properties via file I/O failed. Exception was: java.io.FileNotFoundException
ESAPI: Attempting to load ESAPI.properties via the classpath.
ESAPI: SUCCESSFULLY LOADED ESAPI.properties via the CLASSPATH from '/ (root)' using current thread context class loader!
ESAPI: SecurityConfiguration for Validator.ConfigurationFile.MultiValued not found in ESAPI.properties. Using default: false
ESAPI: Attempting to load validation.properties via file I/O.
ESAPI: Attempting to load validation.properties as resource file via file I/O.
ESAPI: Not found in 'org.owasp.esapi.resources' directory or file not readable: D:\DevelopmentEnvironment\Workspaces\JavaProjects\esapi_demo\build\libs\validation.properties
ESAPI: Not found in SystemResource Directory/resourceDirectory: .esapi\validation.properties
ESAPI: Not found in 'user.home' (C:\Users\XINGYUN) directory: C:\Users\XINGYUN\esapi\validation.properties
ESAPI: Loading validation.properties via file I/O failed.
ESAPI: Attempting to load validation.properties via the classpath.
ESAPI: SUCCESSFULLY LOADED validation.properties via the CLASSPATH from '/ (root)' using current thread context class loader!
&lt;script&gt;alert&#x28;&#x27;xss&#x27;&#x29;&lt;&#x2f;script&gt;
[2021-01-24 18:32:46] [HTMLValidationRule] [EVENT FAILURE Anonymous:@unknown -> /ExampleApplication/HTMLValidationRule] ESAPI property Validator.HtmlValidationConfigurationFile not set, using default value: antisamy-esapi.xml
ESAPI: Attempting to load antisamy-esapi.xml as resource file via file I/O.
ESAPI: Not found in 'org.owasp.esapi.resources' directory or file not readable: D:\DevelopmentEnvironment\Workspaces\JavaProjects\esapi_demo\build\libs\antisamy-esapi.xml
ESAPI: Not found in SystemResource Directory/resourceDirectory: .esapi\antisamy-esapi.xml
ESAPI: Not found in 'user.home' (C:\Users\XINGYUN) directory: C:\Users\XINGYUN\esapi\antisamy-esapi.xml
[2021-01-24 18:32:46] [HTMLValidationRule] [EVENT FAILURE Anonymous:@unknown -> /ExampleApplication/HTMLValidationRule] Loading antisamy-esapi.xml from classpaths
[2021-01-24 18:32:46] [HTMLValidationRule] [EVENT FAILURE Anonymous:@unknown -> /ExampleApplication/HTMLValidationRule] SUCCESSFULLY LOADED antisamy-esapi.xml via the CLASSPATH from 
'/ (root)' using current thread context class loader!
[2021-01-24 18:32:46] [IntrusionDetector] [SECURITY FAILURE Anonymous:@unknown -> /ExampleApplication/IntrusionDetector] Invalid HTML input does not follow rules in antisamy-esapi.xml: context=get safe html errors=[出于安全的原因,标记script不被允许。此标记不应该影响输入的显示。]
[2021-01-24 18:32:46] [null   ] errororg.owasp.esapi.errors.ValidationException: get safe html: Invalid HTML input


上传的附件:
×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回