python中eval函式的使用及安全性問題

2021-08-20 06:13:54 字數 1709 閱讀 6712

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型別 如果提供...