2016-06-13 84 views
3

我知道這是technically a duplicate question上執行Python代碼,但我相信它是有效的,因爲原來的問題是7年前提交的,因爲那麼Python/Web安全已經走過了很長的路要走。允許用戶在服務器

我想建立一個Web應用程序,允許用戶輸入Python代碼(通過編輯王牌包),然後在服務器上使用Python解釋器在瀏覽器中執行它。我不能使用pypy.js,因爲我需要使用numpy,pandas和matplotlib。本質上,我想創建自己的Codecademy(我是一名老師,並希望爲我的學生創建Codecademy類課程)。令人遺憾的是,Codecademy在某個時候提到的創造性課程一直沒有成功。

我使用的燒瓶中,但我可以學習Django的是否會更容易些。

什麼是讓我的用戶,而不讓他們影響程序或訪問文件的其餘部分他們被允許到什麼外面跑了Python代碼的最佳方式?

+0

那麼,你的問題是什麼?確保它不太寬! –

+1

即使您信任他人,也允許任何人執行代碼都存在安全風險。我想像CodeAcademy在一個微型虛擬機(或類似的東西)中運行每個用戶,這樣他們就不會對主系統造成任何傷害。 –

+0

也許,如果您使用了從主機系統中分離出來的過程中,你並不需要一個VM的開銷(我想這就是Rushy是指的是「那種東西」),即。碼頭工人而不是虛擬機,如果你不信任你的學生,最終會強制訪問控制。 – jpic

回答

2

有使用Python或網絡安全在過去7年沒有根本性的變化。允許用戶在服務器上運行代碼仍然是自殺的。 但是,變化的是像docker這樣的輕量級VM解決方案的可用性。 舉個例子,這可以工作看看https://civisanalytics.com/blog/engineering/2014/08/14/Using-Docker-to-Run-Python/。我不會在這裏引用這個解決方案,因爲你會發現其他的例子,即使這個例子會消失。

然而,這可能是更安全的運行,然後你的服務器,

  • 用戶代碼仍然運行在服務器上的用戶代碼直接。它可能無法擺脫碼頭圖像,但惡意用戶仍然可以上傳例如。拒絕服務工具並從您的服務器發起攻擊。或者嗅探你的網絡流量或其他。
  • 有或至少可能有辦法打破碼頭形象。

對於像教室這些風險是可以接受的一個受控的環境中,但對於一個公共服務器,你將需要大量的安全懂得如何進一步鎖定服務器和泊塢窗的圖像和過濾器可蟒蛇功能。

+0

Docker看起來是一個很好的解決方案。現在這個計劃只是在我大學的網絡上運行它(所以學生們必須連接VPN以便在校園外訪問它)。如果我將它轉移到公共服務器上,我會嘗試爲實際的後端開發人員獲得撥款資助......但這是一個假設,很遙遠。 –