[Python] [ANN] secimport

Marco Giusti marco.giusti a gmail.com
Mar 16 Nov 2010 11:13:16 CET


On Mon, Nov 15, 2010 at 07:56:54PM +0100, Manlio Perillo wrote:
[...]
> secimport ? un import hook che permette di verificare ciascun modulo
> importato usando una database di "firme" di ciascun modulo.
> Una "firma" ? semplicemente un hash (personalizzabile, tramite il modulo
> hashib.new) del file dove il modulo si trova.
> 
[...]
> 
> In fase di installazione verr? creato uno script
> `build_signature_database.py`, che si occupa di creare il database (un
> semplice dizionario) di *tutti* i moduli Python accessibili dalla
> instanza dell'interprete utilizzata.
> 
> Al momento lo script include anche alcuni moduli non importabili (non ?
> un problema ma ? da sistemare).
> 
> 
> IMPORTANTE: la sicurezza ? tutta da verificare!

qualche pensiero sparso a proposito.

prima di tutto il modulo stesso deve essere importato e prima di essere
importato non c'? nessun controllo sul modulo stesso, ergo basta
modificare il modulo `secimport`.

quando fai il controllo del file `__init__.py` si deve controllare anche
i relativi `.pyc` e `.pyo`, infatti basta modificare a piacere il file
`__init__.py`, copiare il bytecode nella giusta posizione, il file
`__init__.py` rimane quello originale ma viene modificato l'mtime.
`secimport` controlla il file `__init__.py` ma l'importer python
caricher? il bytecode modificato.

di questo punto non sono sicuro, ma non vengono effettuati controlli
sulle estenzioni C, l'unico controllo ? un `assert` che come ho detto
nell'altro thread pu? essere semplicemente eliminato compilando il
codice python con le relative ottimizzazioni. gli `assert` servono solo
per debug ed errori di programmazione.

il file con gli hash dei vari moduli ? facilmente modificabile rendendo
vano tutto il lavoro fatto.

inoltre non ? da scartare il fatto che per ogni piccola modifica bisogna
ricalcolare il relativo hash, questo rende la distribuzione pi? tediosa.

come è stato detto bisogna fare un ragionamento di costi/benefici e lo
stesso farà chi cerca di modificare il tuo programma. se il programma
non interessa a nessuno tutto questo lavoro è inutile, senza considerare
che tutto questo ha un costo che non porta nessun beneficio all'utente
finale (il programma non sarà più efficiente/economico/robusto/ecc.)

m.

-- 
Cosa volete? Questo diavolo d'uomo ha sempre le tasche ripiene di argomenti
irresistibili.
		-- Pierre Augustin Caron de Beaumarchais


Maggiori informazioni sulla lista Python