2014-03-04 24 views
-2

我試圖製作一個網站,用戶可以在Python或Octave中進行編程。很像在電子學習網站Udacity。用戶在網站上輸入他的代碼,然後將其發送到網絡服務器,該網絡服務器處理代碼並將響應返回給用戶。我得到它的工作,但我認爲這是非常不安全的,因爲我沒有對代碼運行任何檢查。我讀here Udacity將代碼發送到沙盒集羣並對其運行自己的測試以查看它是否通過。針對用戶生成的Python代碼運行檢查

所以我的問題是:如果我不跑反對這個代碼檢查會發生什麼?我的整個網站是否可以被聰明的惡意用戶刪除?我應該測試這個代碼以確保「沒有什麼不好的事情發生」?

+0

這是完全不可能的(除了執行代碼和看到會發生什麼)。你想沙箱代碼,以確保用戶只能做你想讓他做的事情。 – l4mpi

+0

以下是一個安全的選擇:http://www.skulpt.org/ –

回答

4

這將取決於幾件事情:

  • 你運行它作爲一個受限用戶?
  • 你有最大允許運行時間嗎?
  • 您是否允許網絡訪問或限制它?

惡意代碼作爲根用戶可以刪除你的服務器的內容。惡意的非根代碼找到了提升並仍然有害的方法。 非根代碼可能會阻止或找到其他方式來使用所有可用的服務器資源。 無限制的代碼可能會對Web資源發起拒絕服務攻擊。它可能會影響內部網絡並將詳細信息發佈給惡意個人,以提供進一步的信息以進行更多協調的攻擊。

隨着文件和子進程訪問 - 它可以寫出x86或C代碼,彙編/編譯/鏈接並運行它。


至於其固定 - 有這樣的代碼的系統上運行的至少特權用戶,或者更好的是一個專用的VM /容器的內部。

你可以找到一種方法,有一組非常有限的核心庫和提供內建的限制蟒蛇內運行 - 禁用網絡,子處理,文件打開,穿線。

對於任何建議的方法 - 你將需要調查的影響和他們的弱點。

最後一個選擇是調查「睡衣」 - 這確實蟒蛇在轉換到JS瀏覽器,如果能夠使其在瀏覽器中運行的全部。那意味着用戶代碼和潛在的結果驗證可以在他們的瀏覽器中運行 - 而不是你的服務器。