Programadores despistados y la seguridad

Ayer recibí el siguiente correo de un preocupado programador (lo de programador despistado no va dirigido a la persona que me escribió el mail 😉 ):

A pesar de haber leido mucho sobre inyección de SQL, aun son incapaz de realizar ataques decentes. Mis ataques son tan malos que hacen que mis webs parezcan seguras cuando no lo son.

Siguiendo tus consejos suelo usar autenticas paranoias en el filtrado de cadenas de entrada. Ademas de validar los tipos de todas aquellas variables que vayan a una consulta.

Ultimamente me he encontrado con un programador que me ridiculiza diciendo que él lo arregla asi de facil:

asp:
<%
function sanear(original)
        texto=""
        cadena="abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789,.':;ÁÉÍÓÚÀÈÌÒÙáéíóúàèìòùïüÏÜçÇ¡!¿?-_*+-/=)(@%ºª{[]} "
        origen=original&""
        if len(origen)>0  then
        for i=1 to len(origen)
                letra=mid(origen,i,1)
                if instr(cadena,letra)>0 then
                        texto=texto&letra
                end if
        next
        end if
        sanear=texto
end function

usuario=replace(sanear(request.Form("usr")),"'","")
contrasena=replace(sanear(request.Form("pass")),"'","")

set rs=con.execute("select * from usuario where usuario='"&usuario&"' and contrasena='"&contrasena&"'")

%>

La base de datos está en una intranet y es un SQL Server 2000

A mi me parece que eso es tan inseguro como no poner login. Pero no he sido capaz de crear una cadena que se salte ese filtro 🙁

Me atasco con el espacio en blanco que no esta permitido. Probé el %00, el char(32)... pero algo hago mal porque no lo logro 🙁

Necesito demostrar que eso es inseguro o seguiran usando esa mierda de validaciones en toda la aplicacion.

Puedes usar mi pregunta para un articulo si te parece oportuno, de hecho seguro que tus lectores sabrian darme una respuesta.

No hay que ser experto en ASP para darse cuenta que ese código es bastante ineficiente y le dá una falsa sensación de seguridad al que lo programó, así mismo, me parece que también demuestra su falta de experiencia en programación.

Viendo el ejemplo particular que pone, creo que no es vulnerable a inyección de SQL. ¿Ustedes qué opinan?

8 Replies to “Programadores despistados y la seguridad”

  1. cierto, no vi esa parte... pero si terriblemente ineficiente, con algunas cadenas bastante grandes, no tomaria mucho para hacerle un DOS por falta de memoria

  2. Y otro cosa mas !
    ¿el dba que opina? ¿No le sale espuma verde por la boca al ver como la web ejecuta ese código?
    Espero que no proteja contrA xss de la misma forma!

  3. De acuerdo contigo Devjoker, lo más curioso es que al parecer ese programador está orgulloso de esa función.

  4. Amigos,

    Ese programador dejo blindado el login en 2 minutos.

    Yo estuve arreglando el mismo problema y tarde como 2 semanas porque estuve estudiando todo lo posible sobre ataques de inyeccion -no solo de SQL-, consulte en foros, revise el codigo de todos mis formularios, etc.

    El programador no se muestra orgulloso de su funcion como "obra maestra de la programacion" sino se muestra orgulloso de su funcion en terminos de "arreglo en 2 minutos un problema que tu tardas en arreglar 2 semanas".

    Ese programador lo podria hacer mucho mejor si quisiera. Otra cosa es que para esta ocasion haya preferido copiar y pegar de un foro de la red e ir a lo "simple y rapido" en lugar de una expresion regular o buscar una solucion mas eficiente.

    Critiquemos la funcion, pero no al programador, que sus motivos tendra para hacer chapuzas.

    Y el que nunca haya programado una funcion vergonzosa y chapucera que tire la primera piedra.

    --mensaje escrito intencionadamente sin tildes--

  5. #7: 2 minutos son más que suficientes para que alguien como yo que nunca programó en ASP, pueda documentarse y ejecutar esa consulta de manera segura usando parámetros.

    IMHO, el tiempo y "facilidad" no es excusa para que alguien vaya a copiar y pegar ese tipo de código, menos aún si ya lleva tiempo en este mundillo de la programación -- es cierto que todos alguna vez hemos programado chapuzas (como tú las llamas), pero es nuestro deber mejorar a medida que vayamos ganando experiencia.

    Por otro lado, vamos que decirle a ese programador que le falta experiencia y que [al parecer] se siente bien con esa porción de código, no son críticas viscerales como para que el aludido se ofenda...

Comments are closed.