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.