我正忙着構建在線C#解釋器,有點像Codepad。現在有明顯的安全問題:在線c#解釋器安全問題
- 無限循環
- System.Diagnostics.Process.Start
- 差不多整個System.IO命名空間
我的C#的知識是不完全無關緊要,但我確信有很多知道更多的東西,加上我沒有想到的東西。你會注意什麼?
一些精度,我打算在使用Mono的小型Linux VPS上運行這個精度。
我正忙着構建在線C#解釋器,有點像Codepad。現在有明顯的安全問題:在線c#解釋器安全問題
我的C#的知識是不完全無關緊要,但我確信有很多知道更多的東西,加上我沒有想到的東西。你會注意什麼?
一些精度,我打算在使用Mono的小型Linux VPS上運行這個精度。
使用Mono的Compiler as service功能。它可以編譯爲兼容Silverlight的DLL(客戶端配置文件),並且has been已經可以,您可以checkout。這應該解決您對IO的一些擔憂。
+1:這聽起來像是要走的路,因爲微軟已經完成了在DLL本身內定義安全風險的工作。之後,您只需關注誤用問題(例如,使用您的服務進行DOS攻擊的用戶)。 – StriplingWarrior 2011-03-01 23:56:54
這不需要客戶端安裝Silverlight嗎? – DotnetDude 2011-03-02 15:42:26
@DotNetDude:在Runcs示例中,silvelight是必需的 - 但如果您在服務器上運行Mono.CSharp DLL,則它只是需要安裝.NET的服務器。 (客戶端配置文件只需要.NET,而不是silverlight)。 – 2011-03-03 08:35:32
由於你可以從GetType()去Assembly
幾乎任何你想要的東西,所以想到了思考。
IMO,反射正是你想要避免的,因爲它允許你執行(可能)任意代碼,而不是你想爲了安全目的而強制執行的受限子集。 – 2011-03-01 23:52:29
其實用戶代碼可以做任何事情。這將是很難處理的特殊情況。在我看來,最好的辦法是:
a)create sandbox appdomain只有執行權限。這確保了許多事情,如無法混淆文件系統或調用本地庫。
b)創建新的流程並在其中啓動您的appdomain。
然後監控內存和CPU消耗的過程。如果出現任何問題 - 殺死它。請注意,這是您可以殺死的進程,而不是appdomain。使用appdomain你可以嘗試卸載它,但是如果惡意代碼在finally子句中運行,那麼它將無法工作。
還有一些(知我)問題與此:
無論如何總有一種風險。我當時也在想這個想法,下面是當前結果:rundotnet
查看此鏈接,您將能夠了解在線C#解釋器的一些內容,嘗試一些內容並閱讀輸出異常以瞭解如何他們做到了。
我知道這個問題的性質可能不是很StackExchange十歲上下,所以我想我會接受最完整的答案。 – 2011-03-01 23:32:38
它是否與Java具有基本相同的安全機制? – 2011-03-01 23:50:33
你完成了你的翻譯? – Shimmy 2011-12-22 10:58:17