[pyar] Peligrosidad de un lambda

Esteban Kuber ekuber en gmail.com
Sab Oct 2 06:45:40 ART 2010


>>>> Algo que nadie mencionó todavía, podés pasarle a eval los diccionarios
>>>> de va a tomar como namespace global y local[0].
>>>>
>>>> Usando eval(string, {}, {}) podés tener un _poquito_ más de tranquilidad.
>>>>
>>>
>>> Seria muy interesante tener alguna version con "Sandbox" de Python,
>>> parecida a la que hace andar las apps de Google App Engine.
>>>
>>> En la Wiki de Python hay una seccion con varios tips de seguridad,
>>> entre ellos formas de Sandbox:
>>>
>>> http://wiki.python.org/moin/Security
>>
>>>>> eval('__import__("os")', {'__import__': None},{})
>> Traceback (most recent call last):
>>  File "<input>", line 1, in <module>
>>  File "<string>", line 1, in <module>
>> TypeError: 'NoneType' object is not callable
>>
>
> Sipi, entendi la idea y nunca dije que hayas dicho algo incorrecto, te
> hice quote a vos porque era tu respuesta era interesante,

No offense taken.

Agregué eso porque en uno de mis pocos momentos de lucidéz me avivé
que con el global y el local podía evitar el import.

> pero... ya que estamos, si me lanzás un desafío no me dejás otra
> opcion que intentar resolverlo...
>
>>>> eval('__builtins__["__import__"]("os")', {'__import__': None},{})
> <module 'os' from '/usr/lib/python2.6/os.pyc'>
>
>>>> eval('__builtins__["__import__"]("os").system("cat /proc/version")', {'__import__': None},{})
> Linux version 2.6.32-5-amd64 (Debian 2.6.32-23) (dannf en debian.org)
> (gcc version 4.3.5 (Debian 4.3.5-3) ) #1 SMP Fri Sep 17 21:50:19 UTC
> 2010
> 0
>
> :P

Conocen el juego Wac-a-Mole? A eso es a lo que me refería con
_relativamente_. Podés hacerlo seguro, siempre y cuando seas lo
suficientemente previsor (eval(string, {'__import__': None,
'__builtins__': None, etc.}, {})).

> Seria muy interesante tener alguna version con "Sandbox" de Python,
> parecida a la que hace andar las apps de Google App Engine.

Es una idea interesante, y habría que ver si mirando al SDK no ayuda.
Yo por lo pronto, si alguien intenta iniciar un proyecto relevante,
por más que me encantaría no puedo ayudar.

Pienso que sería espectacular una página en la wiki con una reseta de
eval seguro, ya que serviría para el 85% de los casos.



More information about the pyar mailing list