все Python 3pickleфункция
pickle.loads()
загрузка
Восстанавливает объект из bytes в формате pickle. Нельзя вызывать на данных из недоверенного источника: они исполняют код при загрузке.
Синтаксис
obj = pickle.loads(data, /, *, fix_imports=True, encoding='ASCII', errors='strict', buffers=None)
Объект в pickle может через __reduce__ назвать любую функцию с аргументами, и loads её вызовет — пример ниже печатает строку, а настоящая атака запустит команду в системе. Проверка «после загрузки» не спасает: код уже выполнился, и try/except тоже. Если данные пришли из сети, cookie или от пользователя — json.loads; если без pickle никак, подписывайте байты hmac и сверяйте подпись до загрузки.
Примеры
import pickle
class Trap:
def __reduce__(self):
return (print, ('код выполнен при загрузке!',))
obj = pickle.loads(pickle.dumps(Trap()))
print(obj) # → None — loads вернул результат print(), а не Trap
import pickle
print(pickle.loads(pickle.dumps({'a': (1, 2)}))) # → {'a': (1, 2)}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности