2016-10-11 15 views
0

我們使用Veracode掃描編碼。結果報告了51行中可能的SQL注入。代碼如下。如何修復來自Veracode Security Scan的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

如果這是一個黑箱掃描器;您能否向我們提供掃描器發送的HTTP請求以及Web服務器返回的HTTP響應。我們需要掃描儀的攻擊細節來進一步瞭解這一點。 – Juxhin

回答

0

這是源代碼掃描儀。下面是一個調用queryForRowSet()的方法。 sql語句從REGULATORYINFO中選擇REGID,REGPREFIX,DESCRIPTION,DATAALIAS,SYSTEMALIAS,其中REGPREFIX =:regprefix。

請參閱下面的代碼。

私人布爾va​​lidateProductVersion(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; 
}