eval函數
比較強大,能夠把
字符串
當成
有效表達式
來求值並返回計算結果
注:以下代碼是在IPython中運行的結果
# 基本的數學計算
In [1]: eval("1 + 1")
Out[1]: 2
# 字符串重復
In [2]: eval("'-' * 20")
Out[2]: '--------------------'
# 將字符串轉化為列表
In [3]: type(eval("[1,2,3]"))
Out[3]: list
# 將字符串轉化為字典
In [4]: type(eval("{'name':'Zhangsan','age':23}"))
Out[4]: dict
01.不要濫用eval
在開發的時候千萬不要使用eval
直接轉換input
的結果
具體的原因是:
__import__('os').system('ls')
等價於:
import os
os.system("ls")
執行成功,則返回0
執行失敗,則返回錯誤信息
02.案例說明
input_str = input("請輸入一道算術題:")
print(input_str+"的結果是:", eval(input_str))
程序運行后,輸入代碼:__import__('os').system('cat Demo3.py')
后可以查看整個Demo3.py文件的內容,這就存在風險了。有可能代碼被人看完后,直接被rm -f Demo3.py
刪除了。如果遇到惡意黑客,並且服務器是Linux服務器,直接使用 rm -rf /
,那就真的是沒戲了,一切都完了!