当前位置: 首页 > 知识库问答 >
问题:

无法使用OWASP减轻SQL注入。ESAPI-Veracode

葛鸿熙
2023-03-14

我正在对我的Java代码执行veracode扫描,它在我的一个DAO类中抛出了以下错误

SQL命令中使用的特殊元素的不正确中和(“SQL注入”)CWE ID 89

然而,我试图使用OWASP来减轻这种情况。ESAPI库,因为我不能使用参数化的输入来构造我的查询,因为我使用的是字符串生成器。以下是我正在尝试的示例代码

private static String getPhoneDataSql(QuerySearchType type, PhoneQueryParams queryParams){      
    StringBuilder sql = new StringBuilder("select * from users where ");
    List<String> sqls = new ArrayList<String>();

    if(StringUtils.isNotBlank(queryParams.getUserId())){
        sqls.add("USER_ID like ".concat(type.format(encodeSQLInput(queryParams.getUserId()))));
    }
    if(StringUtils.isNotBlank(queryParams.getUserName())){
        sqls.add(UNAME_LIKE.concat(type.format(encodeSQLInput(queryParams.getUserName()))));
    }
    if(StringUtils.isNotBlank(queryParams.getCompany())){
        sqls.add("STR_COMPANY like ".concat(type.format(encodeSQLInput(queryParams.getCompany()))));
    }   

    boolean firstAnd = false;
    for(String s : sqls){
        sql.append(firstAnd ? STR_SQL_LIKE : "").append(s);
        firstAnd = true;
    }
    return sql.toString();
}

private static String encodeSQLInput(String sqlInput){  
    Codec ORACLE_CODEC = new OracleCodec();
    if(sqlInput == null) {
        return "NULL";
    }   
    sqlInput = ESAPI.encoder().encodeForSQL( ORACLE_CODEC, sqlInput);
    return sqlInput;
}

有人能帮忙吗?

共有1个答案

周祺
2023-03-14

如果像Veracode这样的SQL注入扫描器发现你用应用程序变量的字符串连接来构建SQL查询,它们通常会抱怨。它们无法判断您是否已经正确地对应用程序变量中的内容进行了转义以使其安全

最好避免字符串连接,因为它很容易出错并意外允许SQL注入漏洞。

请改用查询参数。不要连接字符串,而是留下一个占位符,如< code >?中,并将变量绑定到语句。

文档中有很多示例:https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

 类似资料:
  • 我正在尝试通过使用 ESAPI 覆盖()来覆盖 ESAPI OWASP 库中的现有方法。不知何故它不起作用,你知道为什么吗? 这是我的代码:

  • OWASP ESAPI for Java: 为Java开发人员提供强力且简单的安全控制。 OWASP ESAPI (OWASP企业级安全API)是一个自由开源的web程序安全控制库,它可以让程序员很容易的写出低风险的程序。The ESAPI for Java library is 旨在让程序员很容易的改进现有程序的安全。 ESAPI for Java 也为新的开发奠定了坚实的基础。 更多信息,请访

  • 攻击向量:java.io.PrintWriter.write 说明:此对 java.io.打印编写器.write() 的调用包含一个跨站点脚本 (XSS) 缺陷。应用程序使用用户提供的输入填充 HTTP 响应,允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。XSS漏洞通常被利用来窃取或操纵cookie,修改内容的呈现方式以及破坏机密信息,并定期发现

  • 我们正在将ESAPI2.x(owasp java安全库)添加到一个应用程序中。 有人能展示一个通过使用规范化来防止的攻击样本吗??(爪哇语) 谢谢!

  • 在我当前的项目中,我正在使用Maven和Spring。我目前正在使用SLF4J记录器来记录服务。代替它,我想使用OWASP-ESAPI记录器。我不想使用安全性,只是日志服务。有人能指导我如何使用记录器,用最少的努力替换slf4j记录器吗?我尝试了很多谷歌搜索,但没有任何帮助。我也会非常感谢一些链接来获得有关记录器的知识。

  • 在一个web项目中,我们使用ESAPI验证器来检测XSS攻击。虽然大多数攻击都如预期的那样被检测到,但它无法将下面给定的输入检测为XSS攻击。 浏览器可能会关闭标记本身,从而触发警报功能。 后端是用Java编写的,UI是用JavaScript编写的。使用的反堕胎文件: https://github.com/owasp/ejsf/blob/master/esapi_master_full/antis