Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Duda sobre la seguridad del programa

En un curso anterior, precisamente en el de JDBC; se nos enseñó que a la hora de hacer nuestro programa, precisamente uno donde el usuario volcaría información que sería enviada a la base de datos esta debería ser tippeada de una forma específica para así evitar que el usuario con intensiones maliciosas pueda escribir código SQL (Si no me equivoco era el Prepared Statement).

De momento estoy a la mitad del primer curso de Spring Boot 3, por lo que no he avanzado mucho; pero me gustaría saber si SpringBoot ya comprende esta seguridad cómo algo ya preestablecido, que no debe ser tipificado; o cuenta con un método que permite dar esa seguridad a nuestro programa de la forma en que PreparedStatement lo hace.

1 respuesta
solución!

Hola Lautaro,

Excelente pregunta, es muy importante preocuparse por la seguridad de nuestras aplicaciones.

Spring Boot, en conjunto con Spring Data JPA, ofrece una capa de seguridad contra ataques de inyección SQL. Esto se debe a que Spring Data JPA utiliza internamente la interfaz PreparedStatement de JDBC, que como bien mencionaste, ayuda a prevenir este tipo de ataques.

Por ejemplo, cuando usamos los métodos proporcionados por Spring Data JPA como save(), delete(), findById(), entre otros, estos ya están implementados de una manera que previene la inyección SQL.

Además, cuando necesitamos crear consultas personalizadas, podemos usar la anotación @Query. Esta anotación nos permite escribir consultas JPQL (Java Persistence Query Language) que también son seguras contra la inyección SQL. Aquí tienes un ejemplo:

@Repository
public interface UsuarioRepository extends JpaRepository<Usuario, Long> {

  @Query("SELECT u FROM Usuario u WHERE u.email = :email")
  Usuario findByEmail(@Param("email") String email);
}

En este caso, aunque el valor de email viene de un usuario, la consulta es segura contra la inyección SQL porque estamos usando parámetros con nombre en lugar de concatenar strings.

Espero que esta explicación te haya aclarado la duda. Recuerda que aunque Spring Boot proporciona estas medidas de seguridad, siempre es importante seguir las mejores prácticas de seguridad y mantenerse actualizado con las últimas vulnerabilidades y cómo prevenirlas.

Espero haber ayudado y buenos estudios! Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios.