¿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?
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.