Duda con las inyecciones SQL

Buenos días, tengo una duda con el tema de las inyecciones SQL. Estoy
desarrollando una aplicación y en todas los métodos que tengo para hacer
consultas SQL en la base de datos uso el "PreparedStatement" de JDBC.


Mi pregunta es, ¿usando el "PreparedStatement" de JDBC evito las inyecciones SQL?.


Un saludo y muchas gracias.

2

2 respuestas

Respuesta
1

A ver, PreparedStatement es una buena forma de mitigar las inyecciones SQL, pero depende de como lo manejes esto puede ser absolutamente inútil, mira estas lineas:

PreparedStatement Stment = con.prepareStatement("SELECT * FROM table WHERE cond = ' + UserInput + ' ");


Como verás ahí, UserInput es una cadena traída sin validar y por lo tanto puedes estar concatenando código malicioso en tu linea "segura"

Ahora miremos la siguiente:


Stment = "SELECT * FROM table WHERE cond = ? ";
PreparedStatement prepSQL = con.prepareStatement(Stment);
prepSQL.setString (1, UserInput);
ResultSet rs = prepSQL.executeQuery();


Aquí el símbolo "?" se utiliza como preparador para continuar insertando datos en la consulta SQL más adelante.

Luego se utiliza setString para que el driver JDBC la convierta en datos validados y así evitar la inyección SQL.

Yo diría que esta es la mejor solución para evitar dicha vulnerabilidad, estés por meter una consulta a la BBDD valida los datos. También tienes la opción de validar el cada input antes de insertar esos datos a la consulta SQL.

Suerte!


PD: Artículos interesantes:
[url=http://itfreekzone.blogspot.com.ar/2011/04/como-evitar-sql-injection-prepared.html]https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java
http://itfreekzone.blogspot.com.ar/2011/04/como-evitar-sql-injection-prepared.html[/url]

Respuesta
-1

Nada sobre inyecciones!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas