¿Cuál es la defensa principal correcta contra la SQL injection?
Opciones
- Escapar a mano las comillas de la entrada del usuario
- Consultas parametrizadas o prepared statements (Opción correcta)
- Ocultar a los usuarios los mensajes de error detallados
- Usar peticiones POST en lugar de GET
Respuesta
Consultas parametrizadas / prepared statements (o un ORM que las use)
Por qué
La SQL injection ocurre cuando la entrada del usuario se pega en el texto SQL, de modo que una entrada astuta cambia la propia consulta (por ejemplo ' OR 1=1 -- devuelve todas las filas, o '; DROP TABLE users; --).
Con consultas parametrizadas, el SQL y los valores se envían por separado; la base de datos nunca ejecuta la entrada como código.
Escapar a mano es fácil de hacer mal. Además, da al usuario de base de datos de la app solo los permisos que necesite.
Recuerda
Nunca construyas SQL formateando strings; usa parámetros.