2010-01-05 22 views
1

有沒有辦法限制在嵌入式解釋器下運行的python腳本的能力?具體而言,我希望阻止腳本執行以下操作:限制嵌入式python實例的功能

  • 導入python擴展模塊(即.pyd模塊),除了應用程序特別允許的模塊。
  • 以任何方式操作進程(即啓動新進程或終止應用程序)。
  • 任何類型的網絡。
  • 操作文件系統(例如創建,修改和刪除文件)。
+0

是http://pypi.python.org/pypi/RestrictedPython/的一個選項嗎? – diciu 2010-01-05 12:22:14

回答

2

不。有沒有簡單的方法來阻止CPython的這些東西。你的選擇是:

  1. 編輯CPython源代碼並刪除你不想要的東西 - 爲所有這些東西提供模擬方法。非常容易出錯,很難做到。這是Google的App Engine的方法。
  2. 使用Restricted Python。但是,使用它無法阻止用戶耗盡可用內存或運行無限制的全部cpu循環。
  3. 使用另一個python實現。 PyPy有一個sandbox mode你可以使用。 Jython在java下運行,我猜java可以被沙箱化。
+0

嗯,我不會擔心腳本崩潰/凍結應用程序,更多的時候,一個敵意的插件說,從互聯網上下載並執行文件,更改系統設置等。 我想我可以編輯CPython實現,對於某些事情,我想只是不編譯模塊開始將是合適的,如果我想我可以掛鉤模塊加載器來檢查安全pyd模塊的白名單。 是否有任何信息在簡單地從python編譯中刪除模塊/對象? – 2010-01-05 14:03:27

0

也許this會有所幫助。你有一個關於如何使用ast的例子。

+0

「ACCESS DENIED」,我真的很討厭大學的互聯網限制......稍後當我回家時會檢查這個。 – 2010-01-05 13:59:07

0

你想要什麼谷歌的Unladen Swallow項目,運行Python版本App Engine

模塊受到嚴格限制,不允許使用​​,套接字與某些策略或其他內容匹配,換句話說,您將得到一個沙盒版本的Python,符合其Java產品。

我想指出,這使得系統幾乎沒用。對於比另一個[App Engine]應用程序更酷的任何東西都沒用。忘記猴子補丁系統模塊,甚至訪問自己的堆棧也受到限制。完全沒有動態的。

OT:遊戲通常將LUA嵌入腳本中,也許你應該檢查它。