我们正在使用Veracode扫描编码。结果在第51行报告了一个可能的SQL注入。代码如下。
我想知道为什么这是一个SQL注入问题以及如果是的话如何修复它。
@Override
public CloseableSqlRowSet queryForRowSet(String sql, SqlParameterSource paramSource) throws DataAccessException {
try {
conn = getJdbcTemplate().getDataSource().getConnection();
psc = getPreparedStatementCreator(sql, paramSource);
ps = psc.createPreparedStatement(conn);
applyStatementSettings(ps);
resultSet = ps.executeQuery(); // this is line 51
return new CloseableResultSetWrappingSqlRowSet(resultSet, this);
} catch (SQLException ex) {
this.release();
throw translateSqlException(sql, ex);
} catch (Exception e) {
this.release();
throw e;
}
}
答案 0 :(得分:0)
这是一个源代码扫描程序。下面是一个调用queryForRowSet()的方法。 sql语句是从REGULATORYINFO中选择REGID,REGPREFIX,DESCRIPTION,DATAALIAS,SYSTEMALIAS,其中REGPREFIX =:regprefix。
请参阅以下代码。
private boolean validateProductVersion(ConfigPackage configPackage,ProductConfig productConfig){
NamedParameterJdbcOperations toosetEnvTemplate = jdbcTemplateUtil.getNamedParamJdbcTemplate(configPackage.getToolsetEnvAlias());
Map<String, Object> param = new HashMap();
param.put("regprefix", productConfig.getToolsetProduct().getRegulatorId());
SqlRowSet rowSet = toosetEnvTemplate.queryForRowSet(
"select REGID, REGPREFIX, DESCRIPTION, DATAALIAS, SYSTEMALIAS from REGULATORYINFO where REGPREFIX = :regprefix",
param);
if (!rowSet.next()){
return false;
}
VersionNumber toolsetMaxVer = VersionNumber.createFromString(productConfig.getToolsetProduct().getMaxVersion());
VersionNumber toolsetMinVer = VersionNumber.createFromString(productConfig.getToolsetProduct().getMinVersion());
String productVersion = "";
Map<String, Object> paramMap = new HashMap();
paramMap.put("productname", productConfig.getToolsetProduct().getRegulatorId());
productVersion = toosetEnvTemplate.queryForObject(
"select PRODUCTVERSION from INSTALLEDPRODUCTVERSIONS where PRODUCTNAME=:productname AND STBSTATUS='A'",paramMap, String.class);
VersionNumber productVer = VersionNumber.createFromString(productVersion);
if (!org.apache.commons.lang3.StringUtils.isEmpty(productConfig.getToolsetProduct().getMinVersion()) && productVer.isLower(toolsetMinVer)) {
return false;
}
if (!org.apache.commons.lang3.StringUtils.isEmpty(productConfig.getToolsetProduct().getMaxVersion()) && productVer
.isHigher(toolsetMaxVer)) {
return false;
}
return true;
}