Big refactoring en dyntaint.py

Ayer llevé acabo un refactoring importante en mi proyecto Taint Mode para Python.

En resumen: dyntaint.py es un módulo que permite seguirle la huella a datos que ingresan a un programa con el objetivo de evitar que lleguen a ciertas áreas sensibles. Por ejemplo, que “42 or 1=1″ no llegue a una consulta SQL que se ejecutará contra una base de datos.

Si lo anterior no te dice nada, te recomiendo que leas mi presentación sobre el tema.

Hasta hoy, el registro de qué variables estaban manchas con qué tipo de manchas en una corrida del programa se llevaba en una estructura de datos auxiliar llamada TAINTED. Básicamente un diccionario en el cual cada clave se corresponde con un tipo de mancha (o vulnerabilidad), y cada valor es un conjunto de variables manchadas con el tipo de mancha de la clave correspondiente.

El refactoring consistió en cambiar de este esquema a uno en el cual cada variable manchada tiene un atributo (taints) que es un conjunto de identificadores de manchas. Entonces si antes tenía algo como:

{XSS: set(['manchado1', 'manchado2']),
SQLI: set(['manchado1'])}

ahora tengo:

>>> manchado1.taints
set([XSS, SQLI])
>>> manchado2.taints
set([XSS])

La revisión 59 también incluye algunas otras limpiezas. Para ver los cambios:

svn diff -r 58:59 http://svn.juanjoconti.com.ar/dyntaint/

Después de hacer las modificaciones necesarias, y corregir errores, las pruebas corren ok:

Ran 84 tests in 0.006s
 
OK

Podemos discutir los cambios en los comentarios.

About Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí un libro de cuentos que se puede descargar gratuitamente.
This entry was posted in Aprendiendo Python and tagged . Bookmark the permalink.
  • http://grasp.coresecurity.com/ aurelianito

    Unos compañeros de laburo implementaron esto para php. Podés mirarlo en http://grasp.coresecurity.com

  • jjconti

    @aurelianito: conozco Grasp y aunque en una primera mirada puedan parecer lo mismo, son realmente distintos; en filosofía y en implementación.

  • jjconti

    @aurelianito: conozco Grasp y aunque en una primera mirada puedan parecer lo mismo, son realmente distintos; en filosofía y en implementación.