Doctor, me inyectan código
24 Marzo, 2006
Ayer un amigo me comentaba que nada más entrar en el trabajo su jefe le abroncó, me explicó que su código ASP (vbs) era vulnerable a inyecciones SQL, y tenía que solucionarlo.
Una inyección SQL se da cuando el código que maneja la consulta no es lo suficientemente sólido y permite manipular una consulta desde fuera. Por ejemplo:
SELECT * FROM tabla WHERE id = ” & ide & “
Basta con que el atacante abra la url de esta forma url.php?ide=1;DROP TABLE tabla; para cargarse toda la tabla, así de fácil.
Como solución le propuse convertir esa variable a entero, usando cint, ide = cint(ide), de esa forma nunca podría colarse otra cosa que no fuese un número.
En el caso de las cadenas, la solución está en “escapar” las comillas, con un simple Replace(cadena,”‘”,”””)
Hay soluciones mucho mejores para estos problemas, como usar parametrización de consultas, ADODB lo soporta, lo explican en su documentación.
Otra solución también bastante efectiva es la de PHP, que tiene activadas las magic_quotes por defecto y escapea cualquier parámetro que venga de GET o POST, evitando muchos de estos ataques.
24 Marzo, 2006 a las 12:20 pm
Tambien hay que tener en cuanta a la hora de establecer la conexion con la base de datos, de hacerlo con usuarios que no tengan privilegios de owner en dicha base. Un error muy frecuente es usar el usuario sa o root, el cual puede hacer verdaderos estragos en la BD. Para ello se recomienda crear una serie de usuarios en la base de datos que solamente puedan hacer las funciones requeridas, ya sea leer escribir o modificar en ciertas tablas.