gpt4 book ai didi

java - 无法使用 OWASP.ESAPI 缓解 SQL 注入(inject) - Veracode

转载 作者:行者123 更新时间:2023-12-02 09:05:19 29 4
gpt4 key购买 nike

我正在对我的 Java 代码执行 veracode 扫描,它在我的 DAO 类之一中引发以下错误

SQL 命令中使用的特殊元素的不正确中和(“SQL 注入(inject)”)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;
}

有人可以帮忙吗?

最佳答案

像 Veracode 这样的 SQL 注入(inject)扫描程序通常会提示,如果它们发现您正在通过与应用程序变量的字符串连接来构建 SQL 查询。他们无法判断您是否已正确转义应用程序变量中的内容以确保其安全。

最好避免字符串连接,因为它很容易犯错误并意外地导致 SQL 注入(inject)漏洞。

相反,请使用查询参数。不要连接字符串,而是在 SQL 字符串中保留像 ? 这样的占位符,并将变量绑定(bind)到语句。

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

关于java - 无法使用 OWASP.ESAPI 缓解 SQL 注入(inject) - Veracode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855519/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com