Как исправить проблемы с SQL-инъекцией из Veracode Security Scan

Мы используем Veracode для сканирования кода. Результат сообщил о вероятной SQL-инъекции в строке 51. Код приведен ниже.

Я хотел бы знать, почему это проблема с 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;
    }
}

person jeff    schedule 11.10.2016    source источник
comment
Если это сканер черного ящика; не могли бы вы предоставить нам HTTP-запрос, отправленный сканером, и HTTP-ответ, возвращенный веб-сервером. Нам понадобятся подробности атаки сканера, чтобы понять это дальше.   -  person Juxhin    schedule 12.10.2016


Ответы (1)


Это сканер исходного кода. Ниже приведен метод вызова queryForRowSet(). Оператор sql выбирает REGID, REGPREFIX, DESCRIPTION, DATAALIAS, SYSTEMALIAS из REGULATORYINFO, где 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;
}
person jeff    schedule 12.10.2016