Python之eval 函式的危險

2021-05-24 09:19:21 字數 1150 閱讀 4527

python的eval()函式可以把字串「123」變成數字型別的123,pp3e上說它很危險,還可以執行其他命令!

在家沒事,做了些試驗。果然,如果python寫的cgi程式中如果使用eval()而非int()來轉換諸如年齡這樣的輸入框中的內容時是非常危險的。不僅可以看見列出系統的全部檔案,還可以刪除檔案,察看檔案源**。

試著寫了個程式,想把本地的指令碼檔案同過這樣的形式一行一行的寫到伺服器的某個檔案裡,可最後失敗在無法輸入換行符"/n",在提交的語句裡只要有換行符,就會出現eol的出錯提示,換了編碼方式還是沒能成功。

網頁裡有乙個提交名字的視窗,這裡只是以改它為例,否則名字是不會用eval函式轉換的,不過年齡到是很容易出問題。這個檔案(http://localhost/tutor4.html)匯入了os。

line1 = "hello, %s." % eval(form['user'].value)

(1)os.system(『del * /q』) #刪除當前目錄下所有檔案(不包括資料夾)。

os.system呼叫當前系統的命令(如windows)

/q 指定靜音狀態。不提示您確認刪除。

(2)若刪除資料夾,使用rmdir

/s 刪除指定目錄和所有子目錄以及包含的所有檔案。使用 /s 來刪除目錄樹。

/q 在安靜模式中執行 rmdir。不經確認即刪除目錄。

os.system(『rmdir d:/workspace /s/q』)

(3)列出所有檔案os.system(『dir』)。因為成功執行了dir命令後,系統返回0,所以看到的返回內容只能是hello,0.而在伺服器上,倒是真的列出來了,如果有日誌,可能被發現。提交os.system(『dir >dir.txt』),那麼訪問http://localhost/dir.txt,所有的檔案和資料夾都暴露了,想看源**嗎?如果再使用os.system(『type target.py』).命令如果成功完成同樣會返回hello, 0.的。難道再放進乙個檔案,再訪問那個檔案嗎?open(『target.py』).read()

由此,可以在列出和察看其他資料夾裡面的內容了。

如果沒乾別的壞事,那麼可刪除dir.txt以免被人發現了。os.system(『del dir.txt /q』)

匯入os並執行命令:

__import__(『os』).system(『dir >dir.txt』)

Python之eval函式的用法

a 1,2,3 type a class str type eval a 將字串轉換為列表 class list b 1000 type b class str type eval b 將字串轉換為整形 class int c type c class str type eval c 將字串轉換為字...

Python之eval函式的用法

功能 將字串str當成有效的表示式來求值並返回計算結果。語法 eval source globals locals value 引數 source 乙個python表示式或函式compile 返回的 物件 globals 可選。必須是dictionary locals 可選。任意map物件 將字串轉...

python之函式eval()學習

python中有許多很有用的內建函式,比如 eval 這個函式。能夠熟練的使用這些內建函式可以起到很多事半功倍的功效。eval 官方文件裡面給出來的功能解釋是 將字串string物件轉化為有效的表示式參與求值運算返回計算結果。語法上 呼叫的是 eval expression,globals none...