Понимание небезопасности Python Pickle

В документации Python указано, что pickleне является безопасным и не должен анализировать ненадежный пользовательский ввод. Если вы исследуете это; почти все примеры демонстрируют это с помощью вызова system()через os.system.

Что мне непонятно, так это то, как os.systemправильно интерпретируется без импорта модуля os.

>>> import pickle
>>> pickle.loads("cos\nsystem\n(S'ls /'\ntR.") # This clearly works.
bin  boot  cgroup  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var
0
>>> dir() # no os module
['__builtins__', '__doc__', '__name__', '__package__', 'pickle']
>>> os.system('ls /')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>> 

Кто-нибудь может объяснить?

7
задан tMC 24 April 2012 в 16:42
поделиться