2013-10-26 3 views
7

Я работаю через несколько SciPy лекций (http://scipy-lectures.github.io/intro/language/standard_library.html#pickle-easy-persistence), и я наткнулся на это заявление о соленья:Рассол: Не безопасно или быстро?

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

Что они подразумевают под этим? Небезопасно (в соответствии с документами Pickle), как и в случае с UnPickle файлами неизвестного происхождения или небезопасно, так как вы не всегда извлекаете исходный объект?

Какая альтернатива для чего-то более безопасного и быстрого? Я знаю, что cPickle работает быстрее, но я не думаю, что он решает вышеуказанное определение более безопасного.

Спасибо.

ответ

7

Использование рассола в производственном коде уязвимо по дизайну. Произвольный код может быть выполнен в то время как unpickling. Вы можете безопасно распечатывать только данные из надежных источников. Никогда не распечатывайте данные, полученные от ненадежного или не прошедшего проверку подлинности источника.

См. here для образцов реальных применений.

Что касается faster alternative, есть marshal, питон внутренняя библиотека serealization. Но в отличие от pickle (или cPickle, который является просто реализацией C) он менее стабилен (см. docs), а его вывод является архитектурой и независимым от os зависит от версии python. Это объект, ориентированный на платформу Windows, с гарантией того, что python 2.7.5 будет неотъемлемым для OS X или Ubuntu с установленным python 2.7.5, но не гарантируется, что он не будет упрощен с помощью python 2.6 в Windows.

Another faster, безопасный по дизайну, но less functional альтернатива сериализации JSON.

0

Оригинальный модуль Pickle почти никогда не используется.

Если вам нужно сделать это быстро, используйте cPickle.

Если вам нужен безопасный, попробуйте sPickle.

+1

-1. Pickle используется значительная сумма, пожалуйста, обратитесь к документации: https://docs.python.org/3.4/library/pickle.html – Urda

+0

Существует нулевая документация ... –

Смежные вопросы