This commit is contained in:
GRUPOLKS\m.garcia 2025-03-31 14:26:33 +02:00
parent f2ca735e5c
commit 9618c1bab9

View file

@ -1,69 +1,42 @@
package org.springframework.samples.petclinic.owner; package org.springframework.samples.petclinic.owner;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Statement;
public class issue { public class issue {
public void obtenerUsuarioPorCorreo(String correoElectronico, String contrasena) { // Ejemplo de método vulnerable que usa datos de usuario directamente en la consulta
Connection conexion = null; // SQL
Statement declaracion = null; public ResultSet insecureLogin(Connection connection, String username, String password) throws SQLException {
ResultSet resultado = null; String query = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";
Statement stmt = connection.createStatement();
return stmt.executeQuery(query); // SonarQube marcará esto como Blocker
}
// Método que expone la vulnerabilidad usando parámetros de request simulados
public ResultSet searchUsers(Connection connection, String searchTerm) throws SQLException {
String query = "SELECT * FROM users WHERE name = '" + searchTerm + "'";
Statement stmt = connection.createStatement();
return stmt.executeQuery(query); // Vulnerabilidad SQL Injection
}
// Uso peligroso con concatenación directa
public static void main(String[] args) {
try { try {
// Establecer la conexión con la base de datos // Simulación de datos controlados por el usuario
conexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/miBaseDeDatos", "usuario", String userInput = "admin' OR '1'='1";
"contrasena"); String passInput = "fake' OR 'x'='x";
// Crear la declaración issue example = new issue();
declaracion = conexion.createStatement(); ResultSet rs = example.insecureLogin(null, userInput, passInput);
// Construir la consulta SQL directamente con datos proporcionados por el // ... procesar resultados
// usuario (vulnerable a inyección SQL)
String consulta = "SELECT * FROM Usuarios WHERE correo_electronico = '" + correoElectronico
+ "' AND contrasena = '" + contrasena + "'";
// Ejecutar la consulta
resultado = declaracion.executeQuery(consulta);
// Procesar el resultado
while (resultado.next()) {
System.out.println("Usuario encontrado: " + resultado.getString("nombre"));
}
} }
catch (SQLException e) { catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
finally {
// Cerrar recursos en el bloque finally
if (resultado != null) {
try {
resultado.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
if (declaracion != null) {
try {
declaracion.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
if (conexion != null) {
try {
conexion.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
} }
} }