2013-02-16 62 views
0

基本上我需要讓用戶提交代碼以便定期運行服務器端。如何安全地允許用戶提交代碼以定期運行?

用戶應該提交簡單的腳本,我會運行他們的代碼服務器端來確定誰提出了一個更好的解決方案。我創建了一個簡單的提交表單,代碼存儲在SQL數據庫中。

我明顯擔心安全,但我也不知道要使用哪種語言。我需要一種簡單的語法結構的腳本語言,讓我限制用戶可以做的事情數量(我只需要讓他們定義變量,創建函數,使用循環以及一些數組和代數函數)。甚至可以用簡單的語法來創建僞語言。

所以基本上:

  1. 我可以用什麼語言?
  2. 如何定期運行用戶代碼? (只知道cronjobs,但我不知道他們是否會允許很長的執行時間)
  3. 創建僞語言會是一個好主意嗎?如果請點我在正確的方向
+0

我會說要麼有某種沙箱(chrooted服務器),所以沒有什麼真的走出來..或解析/解釋代碼,如果它不去複雜的東西 – xblitz 2013-02-16 00:12:49

+0

看看這裏 http://stackoverflow.com/questions/4091887 /如何編寫簡單編程語言 – Sedz 2013-02-16 00:13:21

+0

您應該指定情境的上下文 - 在某些情況下,最好創建受其命令限制的自己的腳本語言。在不同的情況下,我會使用一些虛擬環境。 – 2013-02-16 00:14:57

回答

1
  1. 什麼語言:嗯,你可以用任何語言,只要確保你有最小的權限。但是,像Ruby或Python這樣的腳本語言會更容易。

如果這個任務會落在我的腿上我會看着蟒蛇virtualenv,這樣我就有一個孤立的環境。那麼顯然我會確定運行上傳程序的腳本的權限。

這也意味着您可以爲每個使用此服務的用戶設置一個python環境。

  1. 好吧,克朗的作品。

  2. 事實上,但一個好答案的範圍並不適合這裏。但谷歌DSL或域特定語言,你一定會找到一些教程。

0

Q1。我可以使用哪種語言?

A1。幾乎任何。因爲編譯器會增加系統的複雜性,所以解釋(或JIT編譯)的語言將是可取的。 Q2302。我如何定期運行用戶代碼? (只知道cronjobs,但我不知道他們是否會允許很長的執行時間)

A2。 cron工作可能是最好的選擇。它不關心執行時間。然而,這意味着您的工作是確保您只在上一次運行結束時重新開始工作(假設您希望這樣做)

Q3。創建僞語言會是一個好主意嗎?如果是這樣,請點我正確的方向

A3。發明車輪很少是一個好主意。你可以做到這一點,但有合理的懷疑,這是必要的和/或可取的。

我的個人指針會以JavaScript作爲腳本語言 - 因爲它非常普遍,所以有大量的工具和文檔。所以你可能想看看Node.jsthis sandboxing model來運行它在服務器端。

相關問題