es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿El uso de NamedParameterJdbcTemplate previene la inyección de SQL?

Tengo el siguiente método que utiliza un NamedParameterJdbcTemplate para ejecutar una consulta SQL en Spring Boot:

@Service
class MyRepository(
  val jdbcTemplate: NamedParameterJdbcTemplate
) {
  fun loadData(myKey: List<int>): List<myrow> {

    return jdbcTemplate.query(
      """
            select
                io.KEY as itemKey,
                art.ARTICLE_NR as articleNumber,
                art.PRICE as price,   
                concat(
                  concat(
                    concat(art.BEST_B, BEST_A), 
                      lpad(BEST_B, 2, '0')), 
                        lpad(BEST_A, 2, '0')) as group
            from
                BUY.OPTION io
                INNER JOIN BUYING.ART art ON (to_char(art.id) = io.keyb)
            where
                io.KEY IN (:MYKEY)
      """.trimIndent(),
      parameters
    ) { rs, rowNum ->
      MyRow(
        itemOption = ItemOption(rs.getString("ITEMOPTION")),
        articleNumber = rs.getString("ARTICLENUMBER"),
        price = rs.getBigDecimal("PRICE"),
        group = rs.getString("GROUP")
      )
    }
  }
}

¿Este método ya está protegido contra la inyección de SQL, ya que utiliza NamedParameterJdbcTemplate? ¿O debo tomar algunas medidas adicionales para eso?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, este método está protegido contra la inyección de SQL ya que utiliza un NamedParameterJdbcTemplate. Los parámetros nombrados en la consulta son marcadores de posición que se reemplazan con los valores reales de los parámetros en tiempo de ejecución, evitando así ataques maliciosos de inyección de SQL. Sin embargo, siempre es una buena práctica validar y sanitizar los parámetros de entrada para garantizar que no se pasen al motor de base de datos caracteres y valores inesperados.

Comments are closed.