欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

使用eval函數(shù)會(huì)有什么影響-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括石棉網(wǎng)站建設(shè)、石棉網(wǎng)站制作、石棉網(wǎng)頁(yè)制作以及石棉網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,石棉網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到石棉省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

小編給大家分享一下使用eval函數(shù)會(huì)有什么影響,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討方法吧!

如果你了解JavaScript或者PHP等,那么你一定對(duì)eval()所有了解。如果你并沒(méi)有接觸過(guò)也沒(méi)關(guān)系,eva()l函數(shù)的使用非常簡(jiǎn)單。

>>> eval("1+1==2")     #進(jìn)行判斷
True
>>> eval("'a'+'b'")    #字符連接
'ab'
>>> eval("4+5")        #數(shù)字相加
9
>>>1234567

Python中eval()函數(shù)將字符串str當(dāng)成有效的表達(dá)式來(lái)求值并返回計(jì)算結(jié)果。其函數(shù)聲明如下:

eval(expression[, globals[, locals]])1
  • expression – 表達(dá)式。
  • globals – 變量作用域,全局命名空間,如果被提供,則必須是一個(gè)字典對(duì)象。
  • locals – 變量作用域,局部命名空間,如果被提供,可以是任何映射對(duì)象。

其中,globals 參數(shù)為字典形式,locals 為任何映射對(duì)象,它們分別表示全局和局部命名空間。如果傳人globals參數(shù)的字典中缺少__builtins__的時(shí)候,當(dāng)前的全局命名空間將作為globals參數(shù)輸人并且在表達(dá)式計(jì)算之前被解析。locals 參數(shù)默認(rèn)與globals相同,如果兩者都省略的話,表達(dá)式將在eval()調(diào)用的環(huán)境中執(zhí)行。

“eval is evil”(eval是邪惡的),這是一句廣為人知的對(duì)eval的評(píng)價(jià),它主要針對(duì)的是eval()的安全性。那么eval存在什么樣的安全漏洞呢?來(lái)看一個(gè)簡(jiǎn)單的例子:

import sys
from math import *


def ExpCalcBot(string):
    try:
        print('Your answer is', eval(string))
    except NameError:
        print('The expression you enter is not valid')


print('Hi,I am ExpCalcBot.please input your experssion or enter e to end')
inputstr = ''
while 1:
    print('Please enter a number or operation.Enter c to complete')
    inputstr = raw_input()
    if inputstr == str('e'):
        sys.exit()
    elif repr(inputstr) != repr(''):
        ExpCalcBot(inputstr)
        inputstr = ''12345678910111213141516171819202122

上面這段代碼的主要功能是:根據(jù)用戶的輸人,計(jì)算Python表達(dá)式的值。它有什么問(wèn)題呢?如果用戶都是素質(zhì)良好,沒(méi)有不良目的的話,那么這段程序也許可以滿足基本需求。

比如,輸人1+sin(20)會(huì)輸出結(jié)果1.91294525073。但如果它是一個(gè)Web頁(yè)面的后臺(tái)調(diào)用(當(dāng)然,你需要做一定的修改),由于網(wǎng)絡(luò)環(huán)境下運(yùn)行它的用戶并非都是可信任的,問(wèn)題就出現(xiàn)了。因?yàn)閑val()可以將任何字符串當(dāng)做表達(dá)式求值,這也就意味著有空子可鉆。上面的例子中假設(shè)用戶輸人_import_(“os”).system(“drr”),會(huì)有什么樣的輸出呢?你會(huì)驚訝地發(fā)現(xiàn)它會(huì)顯示當(dāng)前目錄下的所有文件列表,輸出如下:
使用eval函數(shù)會(huì)有什么影響

于是頓時(shí),有人的“壞心眼”來(lái)了,他輸人了如下字符串,可悲的事情發(fā)生了,當(dāng)前目錄下的所有文件都被刪除了,包括test.py,而這一切沒(méi)有任何提示,悄無(wú)聲息。

__import__("os").system("del * /q") #!!!不要輕易在你的計(jì)算機(jī)上嘗試1

試想,在網(wǎng)絡(luò)環(huán)境下這是不是很危險(xiǎn)?也許你會(huì)辯護(hù),那是因?yàn)槟銢](méi)有在globals參數(shù)中禁止全局命名空間的訪問(wèn)。那么我們來(lái)嘗試一下

def ExpCalcBot(string):
    try:
        math_fun_list = ['acos', 'asin', 'atan', 'cos', 'e', 'log', 'log10', 'pi', 'pow', 'sin', 'sqrt', 'tan']
        math_fun_dict = dict([(k, globals().get(k)) for k in math_fun_list])  # 形成可以訪問(wèn)的函數(shù)字典
        print('Your answer is', eval(string, {"__builtins__": None}, math_fun_dict))
    except NameError:
        print('The expression you enter is not valid')1234567

再次輸入__import__(“os”).system(“del * /q”) ,提示如下:
使用eval函數(shù)會(huì)有什么影響

安全問(wèn)題不再是個(gè)問(wèn)題!但同時(shí)又出現(xiàn)了新的問(wèn)題,例如輸入以下字符:
[ c for c in ().class.bases[0].subclasses() if c.name==‘Quitter’ ]0(),其中
().class.bases[0].subclasses()用來(lái)顯示object類(lèi)的所有子類(lèi)。類(lèi)Quitter與"quit"功能綁定,因此上面的輸入會(huì)直接導(dǎo)致程序退出

你可以在python的安裝目錄下的Lib\site.py中找到其類(lèi)的定義。也可以自行在python解釋器中輸入print().class.bases[0].subclasses()查看輸出結(jié)果是什么。

因此對(duì)于有經(jīng)驗(yàn)的侵入者來(lái)說(shuō),他可能會(huì)有一系列強(qiáng)大的手段,使得eval可以解釋和調(diào)用這些方法,從而帶來(lái)更大的破壞。此外,eval()函數(shù)也給程序的調(diào)試帶來(lái)一定困難,要查看里面表達(dá)式具體的執(zhí)行過(guò)程很難。因此在實(shí)際應(yīng)用過(guò)程中如果使用對(duì)象不是信任源,應(yīng)該盡量避免使用eval,在需要使用eval的地方可用安全性更好的ast.literal_eval替代。literaleval函數(shù)具體詳情可以參考文檔http://docs.pythonorg/2/library/ast.html#ast.literaleval。


本文標(biāo)題:使用eval函數(shù)會(huì)有什么影響-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)地址:http://www.chinadenli.net/article48/dcsghp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站App開(kāi)發(fā)網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化網(wǎng)站策劃響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化