2012-06-22 67 views
1

我目前正在開發一個編程競賽網站,並希望實現對提交代碼的支持並在網站上運行它。經過相當多的搜索後,我還沒有找到任何「指南」。創建一個運行代碼的網站

有沒有人知道一個網站(或其他來源),其中包含一些基本的指導方針或基本規則呢?

感謝所有回覆。 PS:如果有人想知道所有的編程語言標籤,我打算至少支持這些語言。

+0

這看起來像是一長串相對簡單的步驟。哪一個阻止了你? –

+0

運行javascript,html,css,jquery,看看http://www.jsfiddle.net是如何工作的。要運行php,請查看http://writecodeonline.com/php/。 –

+2

海事組織你的問題太廣泛了。此外,我不太瞭解這個問題。你的應用程序只需要一個解釋器來支持你想要支持的所有語言... – home

回答

0

對於Java這是很簡單的:

  • 你必須創建Servlet,上傳源代碼到服務器(例如 通過POST請求)

  • 使用Java編譯器API編譯源代碼到字節碼(tutorial

  • 編譯的字節碼,你可能會動態加載通過ClassLoader並啓動它(你也mi GHT配置SecurityManager

  • 而且不要忘了MVC架構:)

1

小心 - 如果你發現很難分解這個項目分成一些較小的,更多的戰術問題,我強烈建議您不要嘗試在您的網站上實際運行任何其他人的代碼。就創建網站本身而言,我建議在可能的情況下利用預先構建的組件或服務 - Wordpress,GitHub等。

一旦您收到提交內容,您將需要一種方法運行它們安全。出於所有實際目的,這意味着你應該假設你運行別人代碼的任何機器可能會自發地燃燒起來。雖然這些語言中的某些語言具有您應該可以用來在「沙箱」中運行代碼的功能,但您可能無法在所有這些語言中達到足夠的專業水平,從而無法妥善保護所有這些語言。

似乎像亞馬遜的EC2這樣的東西可能會有所幫助 - 當你需要運行一個提交時啓動一個虛擬機,當你完成時把它扔掉。他們已經有了一些預配置的圖像,可能非常適合運行這些代碼,並且如果由於錯誤或惡意代碼而導致某些東西被篡改,那麼您並不介意太多,因爲您只是要拋出它當你完成後離開。

1

有一個網站已經這樣做,儘管是爲了特定的目的:抓取數據。

https://scraperwiki.com/ - 與jsfiddle不同,scraperwiki執行服務器端代碼。據我可以收集,他們可能通過亞馬遜實例沙箱環境。不確定他們的代碼可以完全審計和消毒,考慮到各種語言和他們支持的庫。

我認爲大多數人都很難理解scraperwiki如何阻止黑客和垃圾郵件發送者濫用他們的資源。他們對此很感興趣;要麼他們已經手動審計了每一個被執行的代碼,要麼黑客/垃圾郵件發送者還沒有抓到他們。由於該網站具有特定功能,因此他們可能會檢查數據利用率以確定可疑活動。 ......但是,一個男人的網站抓取是另一個男人的騷擾和注入後/後。

我的直覺是,他們永遠不會公開說出他們的安全審計過程是什麼樣子。

如果您確實需要這麼做,那麼最簡單的機械方式就是使用eval()的變體。但是,並非所有的語言都有。這會帶你到選項B,這是虛擬化。更好的人比我能解釋如何對虛擬機進行軍團控制,並會在讓陌生人濫用你的資源時給予適當的警告。相反,我會分享我的PHP體驗。

幾年前我已經做了一個項目,可以在本地機器上執行代碼執行。當你輸入時,它通過ajax獲取代碼並在每次擊鍵後執行。以下是其行爲視頻:http://www.youtube.com/watch?v=Yfxrt2pc3pg

後來有十年時間和三個改進原型,但我仍然不確定我會如何負責任地將其作爲一種常見資源進行鎖定。