miércoles, 22 de agosto de 2012

All the input is evil - I de III

Hoy, en uno de esos intentos por escribir algo que no solo tenga que ver con fallos de seguridad informática me decidí a escribir un post básico sobre las vulnerabilidades más comunes en aplicaciones web y como sanitizarlas.






Trataremos básicamente los principales fallos de una aplicación web que permiten a un atacante "operar" con determinado fin y finalidad.
Hace no mucho asistí (vía streaming tampoco os volvais locos) a una charla de mi amigo @chemaalonso cuyo título era "All the input is evil", lo cual viene a explicar que todos los datos de entrada en la aplicación son malignos.

La charla fue bastante amena y estoy seguro de que a partir de ahora cuando programeis una aplicación os acordareis del título e intentareis sanitizar y controlar al máximo los parámetros de entrada (aunque siempre hay algún cafre que antepone la funcionalidad a la seguridad). }:))

1. - Inyecciones SQL básicas.

Típico caso vulnerable: news.php?new=123


Sabemos (y el programador debe de saberlo) que el código anterior es vulnerable a sql injection. También si nos fijamos sabemos que siempre usamos un id numérico, ¿entonces?
Para mi el código anterior sanitizado sería:



En casos en donde el parámetro de entrada tiene que ser alfanumérico, debemos de hacerlo de la siguiente forma:



2. - Ataque XSS (Cross Site Scripting)

Otro típico caso es el buscador en donde se imprime la palabra que se introdujo en el textbox.




Y aquí el código corregido sanitizando los parámetros de entrada:




¿Fácil no? Pues pegaros una sesión de google hacking y vereis la cantidad de sitios que "pasan" de la seguridad.


All the input is evil - II de III
All the input is evil - III de III 

Fuente: http://www.seginformatica.net

2 comentarios:

  1. Basicamente es la relidad en las aplicaciones web aún asi por ejemplo El XSS no quedaría bien sanitizado

    ResponderEliminar
  2. Claro estas son formas básicas, en relidad este post esta dirigido para aquellos que estan aprendiendo a programar, porque de otra manera por ejemplo cuando haces WHERE newid le meterias la variable GET vulnerable; como este artilujio hay otros más complejos...

    Saludos!

    ResponderEliminar