You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ESAPI搭配Oracle JDBC时遭遇ClassNotFoundException问题求助

解决ESAPI 2.2.1.1中org.owasp.encoder.esapi.ESAPIEncoder类找不到的问题

问题根源

你在ESAPI.properties中配置的org.owasp.encoder.esapi.ESAPIEncoder并非ESAPI核心包(org.owasp.esapi:esapi:2.2.1.1)自带的类,它属于OWASP Encoder独立项目,需要额外引入依赖;或者你可以直接使用ESAPI内置的默认编码器实现。

可行解决方案

方案1:补充OWASP Encoder依赖

在你的构建配置文件(如build.gradle)中添加Encoder依赖,版本选择与ESAPI 2.2.1.1兼容的版本(推荐1.2.3):

implementation 'org.owasp.encoder:encoder:1.2.3'

方案2:切换为ESAPI自带编码器

修改ESAPI.properties里的ESAPI.Encoder配置项,替换为ESAPI核心包内置的实现类:

ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder

重要安全提示

即便使用ESAPI的encodeForSQL方法,直接拼接SQL字符串仍存在SQL注入风险,强烈推荐使用JDBC PreparedStatement做参数化查询,这是防御SQL注入的标准方案。示例代码如下:

// 表名/列名无法参数化,需编码后拼接;参数值用PreparedStatement处理
String query = String.format("SELECT * FROM %s WHERE %s = ?",
        ESAPI.encoder().encodeForSQL(new OracleCodec(), tableName),
        ESAPI.encoder().encodeForSQL(new OracleCodec(), columnName));

try (PreparedStatement stmt = connection.prepareStatement(query)) {
    stmt.setString(1, columnValue); // 参数值用参数化方式
    ResultSet rs = stmt.executeQuery();
    // 处理查询结果
}

内容的提问来源于stack exchange,提问作者Rocky4Ever

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:30:44