[Python] Python web messaggi in Post e link a file in differenti directory

Daniele Varrazzo piro a develer.com
Gio 6 Giu 2013 23:28:52 CEST


On 2013-06-06 21:36, Daniele San Giovanni wrote:
> Ho dato un' occhiata veloce al configparser. Credo sia proprio ciò 
> che mi
> serve. Domani lo vedrò con più calma.
> import ed eval sono 2 cose distinte. Import importa i moduli. Se un 
> modulo
> manca all' interno del percorso di ricerca viene sollevata un' 
> eccezione.
> Eval invece esegue la stringa che gli viene passata come  blocco di 
> codice.
> Poichè nel mio caso il link viene ricevuto in post un hacker potrebbe
> tranquillamente sostituirlo con del codice Python suo e farlo 
> eseguire.

Non avevi detto che avresti passato il *nome* del file da eseguire? O 
meglio, il nome di una cartella contenente un certo file da eseguire? 
Non devi eseguire codice passato dall'utente, ma codice che hai sul 
server. Basta verificare che l'utente non provi a cambiare cartella, 
tipo passando ../.. come nome, ma questo è banale: basta usare abspath 
per verificare se un utente sta provando a scappare.

Import ed eval non sono tanto distinti: import esegue eval (attraverso 
execfile) e crea un oggetto modulo. La funzione che implementa import, 
ovvero __import__, ha una semantica curiosa e cacha il modulo, quindi 
usarla per fare configurazione è una rogna.


> Il configparser mi sa che va bene.
> Grazie mille!

Infatti: se non devi fare aritmetica o manipolazioni di stringhe nel 
file di configurazione, o se non hai bisogno di oggetti complessi, alla 
fine il vecchio file .ini va più che bene.


A presto,

-- 
Daniele


Maggiori informazioni sulla lista Python