我需要存儲的源代碼用於在數據庫中的基本功能,並允許它通過一個管理界面進行修改。此代碼將以幾個數字和字符串作爲參數,並返回一個數字或None。我知道eval是邪惡的,所以我需要實現一種安全的方式來執行python的一個非常基本的子集,或者至少在一個基於python的web應用程序中,在語法上類似。我該如何去安全地執行python的一個子集?
明顯的答案是實現一個DSL,但是,我沒有這方面的經驗,我也沒有任何想法從哪裏開始,而且大量的可用資源似乎比我的頭腦要好一點。我希望也許有一些東西已經存在,這將允許我從數據庫中的字符串本質上生成一個安全的python-callable函數。該語言實際上只需要支持賦值,基本數學運算,if/else和不區分大小寫的字符串比較。任何其他功能都分紅,但我想大多數的東西可以用這一點來完成,不需要複雜的數據結構,類,函數等
如果沒有這樣的事情目前存在的,我願意考慮的創建一個的可能性,但正如我所說,我不知道如何去做這件事,任何有關這方面的建議也將受到讚賞。
這似乎是最好的建議,並simpleCalc支持*什麼,我需要一些*,但是我的DSL也需要支持不區分大小寫字符串比較和某種形式的if/else塊。 – Andre 2010-07-14 15:02:47
沿着類似的路線,像http://waxeye.org這樣的東西可能會走得更遠,而不會讓你進入Python AST的東西。請參閱文檔中的示例。你仍然需要編寫自己的代碼才能真正執行你的迷你語言,但是這聽起來有限,因此從包中的一個計算器例子或其他類似的計算器例子中增加它聽起來並不難。 – 2010-07-14 20:18:31