2011-12-12 29 views
8

Me pregunto cómo Spring MVC maneja las inyecciones de SQL (y otros problemas de seguridad: XSS, inyección de código [javascript], etc.). Hablo sobre todo de escapar de los valores que se agregan a los DB y demás. Parece que no puedo encontrar ninguna respuesta porque cada vez que busco resultados de inyección de primavera sql que involucren inyección de dependencia surgen.Spring (MVC) ¿Evita la inyección de SQL?

Mi flujo es el siguiente: desde el navegador del cliente realizo una solicitud que consiste en un JSON con algunos parámetros de consulta (no la instrucción SQL, que sería demasiado estúpida para formar la consulta SQL en JS). Cuando la solicitud alcanza el método correctamente anotado en el controlador, la solicitud se asigna a través de @RequestBody utilizando Jackson a un "objeto de solicitud". Ahora este objeto se envía al DAO, donde usando la plantilla JDBC consulto el db (y usando RowMapper mapeo los resultados).

En el DAO tengo algo como:

public int countAll(RequestObject request) { 
    String sql = "SELECT count(*) FROM employees WHERE name = '" + request.getName() + "'"; 

    JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource); 
    int count = jdbcTemplate.queryForInt(sql); 

    return count; 
} 

Ahora está a salvo de inyección SQL este enfoque? ¿Las consultas no basadas en JDBCTemplate son seguras dado que están fluyendo a través de Spring MVC?

¿Podríamos tener una pequeña discusión sobre esto?

Respuesta

15

Cada vez que se crea una consulta mediante la concatenación son vunerlable a ataques de inyección

pasar sus parámetros correctamente:

jdbcTemplate.queryForInt(sql, args, argTypes) 

por ejemplo:

 JdbcTemplate insert = new JdbcTemplate(dataSource); 
    insert.update("INSERT INTO PERSON (FIRSTNAME, LASTNAME) VALUES(?,?)", 
      new Object[] { firstName, lastName }); 
+0

Sí, en realidad eso es algo obvio para mí . La pregunta es ... ¿en casos como el que expliqué anteriormente, Spring escapa de todo o no? Ahora, pensando, creo que no, pero solo para estar seguro de que prefiero preguntar. – BogdanSorlea

+2

Y aún no lo ha implementado. La primavera no escapará a nada. En función de la información que proporcionó, lo anterior es su único problema. – Mick

+1

Y esta pregunta no solo se relaciona con la primavera o con Java. Totalmente acepte esta respuesta. – Mukus

Cuestiones relacionadas