Convertir una cadena a formato lista

Hernán Martínez Foffani hernan en orgmf.com.ar
Mie Jun 15 10:37:36 CEST 2005


>>> eval('[2,3]') --> [2,3]
>>
>> Sólo aptas para entradas "controladas". Si la entrada es manipulable
>> por un "enemigo", se puede montar un cristo de tres pares de narices.
>
> En principio siempre he leido que la gente tiene bastante miedo a
> usar el eval por temas de la manipulacion de la entrada y la perdida
> de seguridad, y siempre me hago la misma pregunta, en esto
>
> try:
>   cad = "[1,2,3]"
>   eval( cad,  { "__builtins__" : None }, {} )
> except:
>   ......
>
> Que clase de destroza me pueden hacer ?
> No es seguro ?
> Asi a bote pronto se puede hacer muy poco manipulando la cadena de
> entrada. O es que se me escapa algo ?

Sí, se te escapa la denegación de servicio.

Es verdad que eval(expr, {}, {}) dentro de try/except es mucho mas
seguro que el simple eval pero, por ejemplo,

   eval("[1,2,'caca'*99999999]", {}, {})

puede colgar o abortar la aplicación/servidor/etc.

-H.




Más información sobre la lista de distribución Python-es