2009-05-04 28 views
12

我明白,讓任何匿名用戶上傳任何類型的文件都是危險的,特別是如果它是代碼的話。不過,我有一個想法讓用戶將自定義AI腳本上傳到我的網站。我會提供模板,以便用戶可以在我用Python編寫的在線網絡遊戲中與其他AI進行競爭。我需要一種解決方案來確保用戶無法通過其上傳的腳本或客戶端執行遊戲的解決方案來危害任何其他文件或注入惡意代碼。有什麼建議麼? (我正在尋找一個可以和我的Python腳本一起工作的解決方案)讓用戶上傳用於執行的Python腳本

+1

你的項目聽起來很酷。 – 2009-05-04 01:51:52

+0

非常感謝大家的反饋 – AlbertoPL 2009-05-04 03:55:41

+0

好項目!!!! – 2009-07-14 19:15:07

回答

0

爲用戶提供了廣泛的API並在上載時除去所有其他調用(例如導入語句)。此外,剝離與文件I/O有關的所有內容。

(你可能想要做多遍,以確保您沒有錯過任何東西。)

3

是的。

允許他們腳本他們的客戶端,而不是你的服務器。

8

我與這個網站沒有任何關聯,我只是把它連接起來,因爲它試圖實現你所追求的東西:jailing of python。該網站是code pad

根據about頁面,它在geordi下運行,並使用ptrace捕獲所有sys調用。除了chroot以外,他們還在一臺安裝了防火牆的虛擬機上禁止出站連接。

想一想它的出發點,但我必須在整個危險事件上做出貢獻。自己得CYA。 :)

8

使用PyPy你可以創建一個python沙箱。沙箱是一個單獨的,應該是安全的python環境,您可以在其中執行腳本。這裏更多信息

http://codespeak.net/pypy/dist/pypy/doc/sandbox.html

「理論上這是不可能做什麼壞事或從該提示閱讀機器上的隨機文件。」

「即使script.py來自某個隨機不受信任的源(例如,如果它由HTTP服務器完成),也可以安全地執行此操作。」

4

除了其他安全措施外,您還可以合併人工審查代碼。假設部分經驗正在審覈其他成員的解決方案,並且每個人都是Python開發人員,那麼在有一定數量的成員爲其投票之前,不要讓新代碼被激活。您的用戶不會批准惡意代碼。

1

PyPy在服務器端可能是一個不錯的選擇,但我會考慮讓你的python後端提供定義好的API和數據格式,並讓用戶在Javascript中實現AI和邏輯,以便它可以運行他們的瀏覽器因此,交互如下所示:對於每個match/turn/etc,以明確定義的格式將數據傳遞給瀏覽器,提供一個接收數據並可實現邏輯的JavaScript模板,並提供可由客戶端調用的Web API (瀏覽器)採取所需的操作。這樣您就不必擔心安全性或服務器功耗。