eval()被稱為邪惡、 危險、不良做法等等。
盡管我傾向于避免使用eval(),但我現在很想在單元測驗中使用它來自定義實作__repr__(如在此處討論的)。
基于以下檔案__repr__:
...如果可能的話,這應該看起來像一個有效的 Python 運算式,可用于重新創建具有相同值的物件(給定適當的環境)。...
(盡管關于這是否非常有用的意見不同)
我很想測驗MyClass.__repr__如下:
assert eval(repr(my_class_instance)) == my_class_instance
這讓我想到了我的問題:
假設我們對 CI/CD 使用“在線”測驗運行器,這種用法會eval()帶來任何安全風險嗎?
我不認為它會,看到輸入eval()是已知和信任的,但我不是安全專家......
uj5u.com熱心網友回復:
eval據說是邪惡的,因為當您評估用戶提供的字串時,您隱含地允許他們執行任意代碼。
在這里,您使用的是硬編碼字串。為了能夠執行任意代碼,攻擊者必須修改測驗代碼或測驗代碼__repr__。在任何一種情況下,這意味著他們已經有可能執行任意代碼,無論您使用eval.
所以我的觀點是在eval這里使用沒有安全問題。最多,您可以為未來的讀者添加評論,說明您已經檢查了該用法并確定它沒有增加安全風險。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427894.html
上一篇:Jest以什么順序運行測驗?
