2016-10-21 126 views
0

我明白這個問題可能不適合提問的規則,但我不知道如何在ASP.NET MVC5上實現電子裁判系統。在ASP.NET MVC上實現ejudge?

讓我們定義我的意思是「電子裁判系統」:它是topcoder.com的一個非常簡化的模擬,codeforces.ru的代碼檢查系統。用戶上傳一些源文件,如a.cpp,b.cs,c.py或在某種形式下編寫代碼並提交。

在服務器端,我希望我的後端在某些沙箱中運行此代碼(爲了防止黑客攻擊),請將輸出與存儲的正確答案進行比較,並將結果報告給用戶。

我有一個問題,上面的大膽定義的時刻。我如何在某些沙箱中異步運行提交(源代碼文件的代碼串)?我應該如何收集輸出並與正確的輸出進行比較?我唯一的想法是基於通過一些消息代理將提交發送到另一個應用程序並等待回答。

回答

0

我敢肯定有人會給你一個更好的答案,但因爲沒有任何東西在這裏的那一刻我的2美分:

  • 你總是可以使用虛擬機來運行你的代碼。
  • 使用Windows Communication Foundation向/從機器發送消息並運行軟件並獲取響應。這可能是一個Windows服務,所以它在啓動時運行,或者可能只是將其保存在啓動文件夾中(我認爲這是在登錄時運行)。
  • 將代碼作爲在計算機上擁有有限權限的用戶運行,防止黑客入侵或至少限制黑客可以執行的操作。
  • 讓機器處於獨立工作組中。
  • 關閉除WCF正在使用的端口之外的所有端口。
  • 您可以拍攝機器的快照,並在出現任何原因時無法恢復到該點。

這是一個很多工作,所以有人可能想出一個更容易的答案,但我認爲這是安全的,因爲你可以得到它。這種解決方案可能會使用錘子來破解堅果,並且會佔用相當多的資源。