python有很多內建的很有用的工具函式,結合python的強大的第三方庫,熟練的運用這些內建工具有助於事半功倍,之前寫工具遇到eval()函式,發現這個函式非常好用,但是慢慢後來通過網上的資料知道eval這個函式其實有利也有弊,函式涉及到一些安全問題,下面就對eval函式的使用和涉及到的安全問題進行講解。
eval函式的定義:
eval()官方文件裡面給出來的功能解釋是:將字串string物件轉化為有效的表示式參與求值運算返回計算結果
下面給出一些使用eval()的例子
首先是表示式求值運算:
>>> s='8*8'
>>> eval(s)
64>>> eval('2+5*4')
22>>> x=1
>>> y=4
>>> eval('x+y')
5>>> eval('98.9')
98.9
>>> eval('9.9\n')
9.9>>> eval('9.9\n\t\r \t\r\n')
9.9
最有用的乙個是eval可以將字串轉換成字典,列表,元組
>>> l = "[2,3,4,5]"
>>> ll=eval(l)
>>> ll
[2, 3, 4, 5]
>>> type(ll)
>>> d=""
>>> dd=eval(d)
>>> type(dd)
>>> dd
>>> t='(1,2,3)'
>>> tt=eval(t)
>>> type(tt)
>>> tt
(1, 2, 3)
>>>
eval()函式功能強大,但也很危險,若程式中有以下語句:
s=input('please input:')
print (eval(s))
下面舉幾個被惡意使用者使用的例子:
1》執行程式,如果使用者惡意輸入:
please input:__import__('os').system('dir')
則eval()之後,當前目錄檔案都會展現在使用者前面。
演示結果:
2》執行程式,如果使用者惡意輸入:
please input:open('data.py').read()
如果,當前目錄中恰好有乙個檔案,名為data.py,則惡意使用者變讀取到了檔案中的內容。
演示結果:
3》執行程式,如果使用者惡意輸入:
please input:__import__('os').system('del test.txt /q')
如果,當前目錄中恰好有乙個檔案,名為test.txt,則惡意使用者刪除了該檔案。
/q :指定靜音狀態。不提示您確認刪除。
演示結果:
python中的eval函式
eval 函式用來執行乙個字串表示式,並返回表示式的值。還可以把字串轉化為list tuple dict。eval函式的語法 eval expression globals locals 引數 expression 表示式。globals 變數作用域,如果被提供,必須是乙個字典物件。locals 變...
Python中的eval函式
一 簡介 eval函式就是實現list dict tuple與str之間的轉化,而str函式實現把list dict tuple轉換成字串 1 字串轉化為列表 1 字串轉化為列表 2 a 1,2 3,4 5,6 7,8 9,10 3 print type a 4 b eval a 5print ty...
Python中的eval 函式
python中的eval 函式eval expression,globals none,locals none 官方文件中的解釋是,將字串str當成有效的表示式來求值並返回計算結果。globals和locals引數是可選的,如果提供了globals引數,那麼它必須是dictionary型別 如果提供...