2012-06-12 41 views
6

注:我很感激這一個標籤的一些建議..允許用戶編程語言中的沙盒版本

我想提供我的用戶在編程處理數據的方法服務器。這可以通過使用瀏覽器內代碼編輯器在稍後的日期執行,與https://www.onx.ms的使用方式不同。

我想避免編寫一個DSL(採用的障礙?),並希望用戶編寫的語言是JavaScript或基於Ruby的語言。

我明顯的擔心是安全性。我瞭解允許用戶生成的代碼運行服務器端的風險,但我可以採取哪些措施來消除風險?

http://railsforzombies.com這樣的網站實際上是使用irb,還是比這更簡單?

回答

1

你會考慮Java(或其他JVM語言,如JRuby,Scala,Clojure等)嗎?如果是這樣 - 在JVM中有足夠的權力來限制沙盒應用的權限。有關詳細信息,請參閱此其他問題:How do I create a Java sandbox?

1

Google Caja可以讓你安全地嵌入用戶指定的在您的網站的Javascript,但我想可能是針對運行在用戶的瀏覽器,而不是你的服務器上的代碼。我自己並沒有使用它。

我不知道是否有其他語言的現成解決方案,但我認爲定製解決方案需要在刪除允許用戶寫入磁盤的所有API庫後自行重新編譯解釋器,打開網絡連接, fork進程/線程,並執行任何其他危險或拒絕服務操作。列入白名單的「安全」庫是唯一可行的方法。

如果您爲單獨的用戶使用單獨的虛擬服務器,將會更安全。

+0

Caja不會針對拒絕服務攻擊提供沙箱。它沒有針對運行永久'while(true){}'循環或分配大量內存的用戶的防禦。沙盒iframe中的Javascript與Caja具有相同的安全保證(並且缺少dos保護),同時使用起來更簡單並且更加標準。 – AgentME