Nó nêu trong tài liệu Python rằng pickle
không an toàn và không nên phân tích cú pháp đầu vào không tin cậy của người dùng. Nếu bạn nghiên cứu điều này; hầu như tất cả các ví dụ đều chứng minh điều này bằng cuộc gọi system()
qua số os.system
.Hiểu về sự không an toàn Pickle của Python
Không rõ ràng với tôi, cách thức os.system
được diễn giải chính xác mà không cần mô-đun os
được nhập.
>>> 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
>>>
Ai đó có thể giải thích?
+1 để tìm mã mô-đun – tMC