當前位置:成語大全網 - 新華字典 - 警惕eval()的安全漏洞

警惕eval()的安全漏洞

eval() 函數用來執行壹個字符串表達式,並返回表達式的值。

expression -- 表達式。

globals -- 變量作用域,全局命名空間,如果被提供,則必須是壹個字典對象。

locals -- 變量作用域,局部命名空間,如果被提供,可以是任何映射對象。

如果傳入globals參數的字典缺少__builtins__的時候,當前全局命名空間將作為globals參數輸入並且在表達式計算之前被解析。locals參數默認與globals相同,如果兩者都省略的話,表達式將在eval()調用的環境中執行。

如果要將字符串型的list,tuple,dict轉變成原有的類型,可以用eval()

eval還可以對字符串型的輸入直接計算。

eval()能對解析的字符串都做處理,而不顧忌可能帶來的後果!

在實際應用過程中如果使用對象不是信任源,應該盡量避免使用eval,在需要使用eval的地方可以用安全性更好的ast.literal_eval替代。

ast模塊就是幫助Python應用來處理抽象的語法解析的。而該模塊下的literal_eval()函數:則會判斷需要計算的內容計算後是不是合法的python類型,如果是則進行運算,否則就不進行運算。