mirror of
https://github.com/spring-projects/spring-petclinic.git
synced 2025-07-18 05:45:50 +00:00
fix
This commit is contained in:
parent
f2ca735e5c
commit
9618c1bab9
1 changed files with 24 additions and 51 deletions
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue