Saltar al contenido

Java – escape string para evitar la inyección de SQL

Nuestros programadores estrellas agotaron sus depósitos de café, en su búsqueda todo el tiempo por la respuesta, hasta que Joaquín encontró el resultado en Gitea y hoy la compartimos contigo.

Solución:

Las declaraciones preparadas son el camino a seguir, porque hacen que la inyección SQL sea imposible. Aquí hay un ejemplo simple que toma la entrada del usuario como parámetros:

public insertUser(String name, String email) 
   Connection conn = null;
   PreparedStatement stmt = null;
   try 
      conn = setupTheDatabaseConnectionSomehow();
      stmt = conn.prepareStatement("INSERT INTO person (name, email) values (?, ?)");
      stmt.setString(1, name);
      stmt.setString(2, email);
      stmt.executeUpdate();
   
   finally 
      try 
         if (stmt != null)  stmt.close(); 
      
      catch (Exception e) 
         // log this error
      
      try 
         if (conn != null)  conn.close(); 
      
      catch (Exception e) 
         // log this error
      
   

No importa qué caracteres haya en el nombre y el correo electrónico, esos caracteres se colocarán directamente en la base de datos. No afectarán la declaración INSERT de ninguna manera.

Existen diferentes métodos de configuración para diferentes tipos de datos; el que use depende de cuáles sean los campos de su base de datos. Por ejemplo, si tiene una columna INTEGER en la base de datos, debe usar un setInt método. La documentación de PreparedStatement enumera todos los diferentes métodos disponibles para configurar y obtener datos.

La única forma de evitar la inyección de SQL es con SQL parametrizado. Simplemente no es posible crear un filtro que sea más inteligente que las personas que se ganan la vida pirateando SQL.

Por lo tanto, use parámetros para todas las cláusulas de entrada, actualizaciones y where. SQL dinámico es simplemente una puerta abierta para los piratas informáticos, y eso incluye SQL dinámico en los procedimientos almacenados. Parametrizar, parametrizar, parametrizar.

Si realmente no puede usar la Opción de defensa 1: declaraciones preparadas (consultas parametrizadas) o la opción de defensa 2: procedimientos almacenados, no cree su propia herramienta, use la API de seguridad empresarial de OWASP. Del OWASP ESAPI alojado en Google Code:

¡No escriba sus propios controles de seguridad! Reinventar la rueda cuando se trata de desarrollar controles de seguridad para cada aplicación o servicio web conduce a pérdidas de tiempo y agujeros de seguridad masivos. Los kits de herramientas OWASP Enterprise Security API (ESAPI) ayudan a los desarrolladores de software a protegerse contra fallas de diseño e implementación relacionadas con la seguridad.

Para obtener más detalles, consulte Cómo prevenir la inyección de SQL en Java y la hoja de referencia para la prevención de la inyección de SQL.

Preste especial atención a la Opción de defensa 3: escapar de todas las entradas proporcionadas por el usuario que presenta el proyecto OWASP ESAPI).

Aquí puedes ver las reseñas y valoraciones de los usuarios

Tienes la opción de apoyar nuestra ocupación ejecutando un comentario y puntuándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *