[pyar] Peligrosidad de un lambda

Ricardo Aráoz ricaraoz en gmail.com
Jue Oct 7 11:23:17 ART 2010


  On 04/10/2010 12:43 p.m., Daniel Moisset wrote:
> 2010/10/4 Roberto Alsina<ralsina en netmanagers.com.ar>:
>> On Monday 04 October 2010 12:14:30 Claudio Freire wrote:
>>>   El unico chiste es que no tiene que estar en un lugar
>>>   donde te lleguen datos "extraños".
>>>
>>>   No, no sanear los datos antes de pasarselos, sino no pasarle datos que no
>>>   sabes de adonde vienen. Les recomiendo leer el articulo de taint de Juanjo
>>> en la revista ;-)
>>>
>>> No es eso exactamente lo que es eval(raw_input())?
>> No. raw_input sabés *exactamente* de adonde viene. Viene de un tipo sentado en
>> la terminal, logueado con esa cuenta.
> En realidad, viene de sys.stdin, usualmente un file object asociado al
> file descriptor 0.
>
> O sea que si alguien hace un CGI que hace
>     popen("programapiola.py "+escape(args))
>

Y acá volvemos a la filosofía principal de python que es que sos un 
adulto responsable. Si ese mítico "alguien" hace algo así, entonces ese 
"alguien" es responsable de sus acciones (o lo será el que le da los 
permisos para que lo pueda hacer). Se llama delimitar responsabilidades, 
yo soy responsable de que mi código haga lo que dice que hace y punto. 
Si  lo querés usar para alguna otra cosa entonces ocupate y 
responsabilizate vos. Si escribo código para que tome entrada de una 
terminal y haga X no tengo por qué considerar que vos podés venir 
después y usarlo para otra cosa en la que este código pueda ser 
peligroso, así como no tengo por qué pensar que un terrorista le conecte 
una bomba a la tecla Z (y mi código debiera chequear que no haya nada 
conectado al teclado). Si vos vas a usar mi código desarrollado para una 
aplicación de escritorio para manejar una central nuclear a través de 
una aplicación web, entonces hacete responsable ya que te pagan para eso.

> La peude estar fregando interesantemente sin saberlo (a menos que la
> documentacion de tu programa diga "este programa parece que plotea
> funciones matematicas, pero en realidad permite ejecutar cualquier
> cosas", en esa documentacion que nadie lee)

Cierto, el otro día en w$ ejecuté delete *.* y borré el disco. Es que no 
había leído la documentación. Inmediatamente mandé carta documento a M$ 
exigiendo que me compensen los daños ya que el programador del delete 
tendría que haber supuesto que yo no iba a leer el manual. Claro que los 
de M$ se cagaron de la risa. Por qué habrá sido?


>> Ahora bien, de que manera te proteje no permitir eval(raw_input()) si el tipo
>> puede poner "python" (ya que está logueado) y escribir lo que se le cante?
> En realidad hay muchos contextos donde podes llegar al stdin de un
> proceso, sin necesariamente tener un permiso de shell

En ese caso también hay muchos contextos (creo que los mismos) en los 
que podés ejecutar el intérprete de python sin necesariamente tener un 
permiso de shell. No?
Estoy extenuado!!!




More information about the pyar mailing list