2013-10-26 13 views
7

Sto lavorando con alcune lezioni SciPy (http://scipy-lectures.github.io/intro/language/standard_library.html#pickle-easy-persistence) e mi sono imbattuto in questa dichiarazione su Pickle:Pickle: non sicuro o veloce?

Useful to store arbitrary objects to a file. Not safe or fast! 

cosa si intende con questo? Non sicuro (secondo i documenti di Pickle) come in Non rimuovere i file da un'origine sconosciuta o non sicuri in quanto non si recupera sempre l'oggetto originale?

Qual è l'alternativa per qualcosa di più sicuro e più veloce? So che cPickle è più veloce, ma non penso che risolva la definizione sopra riportata di più sicuro.

Grazie.

risposta

7

L'utilizzo del sottaceto nel codice di produzione è vulnerabile in base alla progettazione. Il codice arbitrario può essere eseguito mentre deselezionante. Puoi tranquillamente deserializzare solo i dati da fonti attendibili. Non annullare mai i dati ricevuti da una fonte non attendibile o non autenticata.

Vedere here per esempi di applicazioni reali.

Per quanto riguarda faster alternative, c'è marshal, pitone interna biblioteca serealization. Ma a differenza di pickle (o cPickle, che è solo un'implementazione C), è meno stabile (vedi docs) e il suo output è architettura e os independend, dipende dalla versione python. Quello è object marshal'ed su piattaforma Windows con python 2.7.5 è garantito essere un-marshalable su OS X o Ubuntu con python 2.7.5 installato, ma non è garantito che sia un-marshalable con python 2.6 su Windows.

Another faster, più sicuro per progettazione, ma l'alternativa di serializzazione less functional è JSON.

0

Il modulo originale Pickle non viene quasi mai utilizzato.

Se è necessario farlo velocemente, utilizzare cPickle.

Se è necessario uno sicuro, provare sPickle.

+1

-1. Pickle viene utilizzato una quantità considerevole, fare riferimento alla documentazione: https://docs.python.org/3.4/library/pickle.html – Urda

+0

C'è zero documentazione ... –