jueves, 22 de mayo de 2008

D.O.S. usando caracteres "comodín" SQL


Hoy he encontrado este documento, de Ferruh Mavituna, con detalles sobre cómo usar los caracteres comodín de SQL ("%", " []", "[^]", "_") para construir una consulta pesada. Utilizable, particularmente, en los formularios de búsqueda que presentan muchas aplicaciones. Véase también sql injection basado en tiempos.

¡Muy bueno!.

3 comentarios:

lonifasiko dijo...

Me juego el cuello a que varias consultas simultáneas (no demasiadas) que lleven operadores tipo "contains" o "like" para buscar texto en una BD tumban casi cualquier sistema de BD "medianamente normal". ¡Qué peligro!

SaludoX.

rafavargas dijo...

@lonifasiko: es harto sencillo encontrarte consultas del tipo:
"SELECT * FROM Tabla WHERE descripción LIKE %{parámetro}%". Si le pasas el % a secas, acabas trayéndote todo el contenido de la tabla.

Por lo general, dichas consultas, cuando la tabla tiene muchos registros (más de 4000), con hacer DOS consultas simultaneas y un intento de inserción dejan a la mayoría de máquinas en estado de deadlock.

Sin embargo, si se han molestado en poner el SET ROWCOUNT {número} este problema se puede evitar.

des dijo...

La gracia del problema descrito por Ferruh Mavituna es que la consulta que se hace no devuelva ni un solo registro, pero que obligue al gestor de BBDD a procesar durante mucho tiempo.

¡La única defensa es a nivel de aplicación!. Deberán "escaparse" todos los caracteres "comodín" SQL.