我意識到這聽起來有點瘋狂,但我正在爲一個項目工作,我需要一個服務器來運行用戶提供的Ruby代碼並返回結果。如何安全地讓用戶運行任意的Ruby代碼?
我期待,以防止這樣的事情:
system("rm -rf /")
eval("something_evil")
# etc...
我敢肯定,必須有一些合理的安全做到這一點的方式,因爲它已經在像tryruby.org的地方存在。任何幫助非常感謝,謝謝!
我意識到這聽起來有點瘋狂,但我正在爲一個項目工作,我需要一個服務器來運行用戶提供的Ruby代碼並返回結果。如何安全地讓用戶運行任意的Ruby代碼?
我期待,以防止這樣的事情:
system("rm -rf /")
eval("something_evil")
# etc...
我敢肯定,必須有一些合理的安全做到這一點的方式,因爲它已經在像tryruby.org的地方存在。任何幫助非常感謝,謝謝!
三點建議:
1)看看紅寶石taint levels。這提供了一定程度的打擊,eval('evil_code')
類的東西保護等
2)除非用戶的實際需要訪問本地文件系統,使用類似fakefs
3)不管你做什麼其他follow Tronic's suggestion(可是一個痛苦的設置,但有限的chroot監獄是確保用戶無法訪問你不明確希望他們訪問的資源的唯一方法。)
以最少chroot的資源限制(內存使用情況等)作爲用戶/組nobody,以允許的syscalls白名單運行程序。
「空白石板」是剝離了其大部分方法的對象。 「潔淨室」是您評估潛在不安全房間的對象。 如果您在「潔淨室」中評估代碼,該代碼也是「空白石板」,將安全級別調高至最高,您將爲自己提供很大的保護。沒有什麼安全是可以肯定的,所以這應該被視爲你的安全層,不一定只是層。