簡體   English   中英

安全的Python表達式評估

[英]Safe Python expression evaluation

我正在編寫一個與混合器完全無關的Python腳本,並且我注意到Blender已經實現了針對我遇到的問題的解決方案。

我正在嘗試將python表達式輸入程序,當前使用eval()函數。 但是,這不是好的安全慣例。 有關更多信息,請參考此問題 請注意,我不需要運算符被阻止,因此ast.literal_eval()不能使用。

Blender來了。 此答案演示了Blender中的一項功能,該功能在驅動程序面板中稱為腳本化的python表達式框。 它恰好實現了我希望我的python腳本執行的操作。 我下載了Blender源以對其進行逆向工程,但其所有C ++都不是python(即使表達式是使用python語法求值的)。

如何實現的?

Blender有效地使用了eval()並且沒有嘗試使表達式安全
(對CPython進行沙盒查找,這並非微不足道)。

這就是為什么Blend文件具有選項Trusted Source的原因 ,有關更多詳細信息,請參閱:
http://wiki.blender.org/index.php/Doc:2.6/Manual/Extensions/Python/Security

有關C代碼,請參見BPY_driver_exec
https://developer.blender.org/diffusion/B/browse/master/source/blender/python/intern/bpy_driver.c 172美元

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM