2011-07-22 13 views
9

Niedawno natknąłem się na problemy bezpieczeństwa modułów Pythona i cPickle. Oczywiście w pikle nie wprowadzono żadnych rzeczywistych środków bezpieczeństwa, chyba że nadpisano metodę find_class jako podstawową modyfikację, aby uzyskać nieco większe bezpieczeństwo. Ale często słyszał, że JSON jest bezpieczniejszy.Zabezpieczenie JSON vs. Pickle

Czy ktoś może trochę o tym powiedzieć? "Dlaczego JSON jest bezpieczniejszy od marynowania?

Wielkie dzięki! Mark

+3

Co masz na myśli mówiąc "natknąłeś się"? Czytasz coś, co mówiło, że są niepewni? Zaimplementowałeś coś, co zostało zhackowane? Albo co? –

Odpowiedz

12

json jest bezpieczniejszy, ponieważ jest zasadniczo bardziej ograniczony. Jedynymi typami Pythona, które mogą być kodowane przez dokument JSON, są: unicode, int, float,,. są one uporządkowane/odrzucone w zasadniczo trywialny sposób, który nie jest podatny na ataki przy wtrysku kodu.

6

Problem piksela polega na tym, że może on wywoływać dowolny kod w Pythonie. Aby uzyskać szczegółowe informacje, patrz http://nadiana.com/python-pickle-insecure. Parser JSON musi tylko tworzyć łańcuchy, liczby, listy, dyktety i tak dalej. Nigdy nie tworzy klas zdefiniowanych przez użytkownika, więc nie musi wykonywać arbitralnego Pythona.