Inyección SQL (SQLi)
Hola,
¡Gracias por tomarse el tiempo de leer el artículo! ¡Te lo agradezco!
El contenido de hoy será sobre la comprensión de 'inyección SQL'
El contenido se basa completamente en mis experiencias y conocimientos personales, interacciones con personas increíbles en el espacio App Sec y Desarrollo de software, y mucha lectura y codificación segura.
En este artículo, intentaré simplificar el contenido en lo básico. Estoy seguro de que los lectores tendrán sus propios pensamientos y comentarios, y agradezco cualquier comentario y discusión.
Vistas/Comentarios/Opiniones son mías y no de mi empleador anterior/actual.
¡Aprendamos juntos!
¿Qué es la inyección SQL?
Un tipo de ataque a la seguridad de la aplicación en el que un actor malicioso inserta código SQL malicioso en un campo de entrada vulnerable para acceder y manipular datos dentro de una base de datos. SQLi permite al atacante ver/modificar/eliminar datos en una base de datos.
¿Cómo arreglar SQLi?
No concatene consultas SQL y valores de entrada.
Realice siempre la validación de entrada ( mi opinión personal, en realidad disuade muchas firmas maliciosas ) y luego siga una de las estrategias debajo para arreglar SQLi:
- Consultas parametrizadas: pase los valores de entrada como parámetros a las declaraciones SQL. Esto se logra mediante el uso de consultas parametrizadas. Esto evita que las entradas maliciosas se ejecuten como código SQL.
- Procedimientos almacenados: es mucho mejor no tener consultas SQL sql dentro del código y moverlas a una base de datos a través de procedimientos almacenados.
Consultas parametrizadas:
En el ejemplo de código debajo, el nombre y el paso se pasan como parámetros a la instrucción sql a través de 'setString()'. Es un método de PreparedStatement.
....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....
En el ejemplo de código debajo, 'nombre' y 'ubicación' se pasan como parámetros al procedimiento almacenado 'Detalles de usuario' a través de 'setString ()'. Es un método de CallableStatement. La salida se recibe a través del parámetro 'salida' que utiliza 'registerOutParameter'. Es otro método de CallableStatement.
....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....
Los comentarios / comentarios siempre son bienvenidos, ya que siempre busco mejorar el contenido y ser mejor en él.
Redacción de la fuente: mi propia experiencia en App Sec, parafraseando el contenido de varios sitios web en línea, herramientas Open AI, DALL-E, Developer y NLP.
¡Gracias!
Agrégame en LinkedIn

![¿Qué es una lista vinculada, de todos modos? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































