0

我们正在使用 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;
    }
}
4

1 回答 1

0

这是一个源代码扫描器。下面是调用 queryForRowSet() 的方法。sql 语句是 select REGID, REGPREFIX, DESCRIPTION, DATAALIAS, SYSTEMALIAS from REGULATORYINFO where REGPREFIX = :regprefix。

请看下面的代码。

私有布尔 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;
}
于 2016-10-12T09:10:49.673 回答