Trong Python2 input([prompt])
tương đương với eval(raw_input([prompt]))
. Và bạn sẽ đi tìm hiểu hàm eval()
(evaluate - nó xem dữ liệu bạn đưa vào là code và thực thi nó) Và rằng bạn sẽ được khuyến cáo là không nên dùng input()
trong python2 (vì lý do bảo mật), cho nên bạn phải dùng raw_input()
trong tất cả các bài tập của bạn.
Một vài ví dụ đơn giản với eval
:
import sys
def hello():
print 'hello(): this function has been called.'
somevar = 69
# gọi 4 lần cho 4 ví dụ :3
print input('eval [1]: ')
print input('eval [2]: ')
print input('eval [3]: ')
print input('eval [4]: ')
Output:
eval [1]: hello()
hello(): this function has been called.
eval [2]: somevar
69
eval [3]: (lambda : sys.stdout.write(“Hello world\n”))()
Hello world
eval [4]: os.system(‘uname -a’)
Linux kproj 4.6.0-kali1-amd64 #1 SMP Debian 4.6.4-1kali1 (2016-07-21) x86_64 GNU/Linux
Bạn thấy đó, nếu bạn dùng nó trong cách script của bạn thì nguy hiểm biết chừng nào khi họ lợi dụng nó như lỗ hỗng để thực thi lệnh bất hợp pháp.