原始問題:
對用戶使用使用- 提供的輸入可能是危險的。 ast 模組的 .literal_eval() 如何提供更安全的替代方案?
Eval 函數:
eval() 函數計算 Python 語句。輸入可以是包含 Python 程式碼的字串,eval() 傳回執行程式碼的結果。
Eval 的危險:
但是,eval() 可以很危險,因為它有可能執行任意程式碼,甚至是您不想要的程式碼。例如,如果使用者提供以下輸入:
它將執行刪除目前目錄中所有檔案的命令。
使用文字評估:
與 eval() 不同,ast.literal_eval() 函數只計算數字文字、字串、布林值和字典。這使得處理用戶提供的資料更加安全,因為它不會執行任意程式碼。例如,在提供的程式碼中:
程式碼只會評估可以解析為字典的輸入,從而防止任何潛在的安全風險。如果輸入不是有效的字典,ast.literal_eval() 將會引發異常。因此,在處理不受信任的輸入時,ast.literal_eval() 應始終優先於 eval()。
以上是Python 安全性:什麼時候應該使用 `ast.literal_eval()` 而不是 `eval()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!