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