簡體   English   中英

C#腳本和安全性

[英]C# Scripting and Security

在我的游戲中(也用C#編寫)我希望包含某種自定義支持。 速度是一個很大的問題因為我打算將游戲的主要部分卸載到腳本中。 因此,我選擇使用C#來編寫游戲事件和內容的腳本。 用戶還應該能夠在C#中為游戲編寫腳本和插件。 (我知道C#不是一種腳本語言。)

我將為用戶提供一個(靜態)類,其中包含與游戲交互所需的所有功能。 用戶還可以提供代碼作為源代碼(在這種情況下游戲將編譯它)。 在某些情況下, 編譯的用戶“腳本”也可以/將被傳輸給其他玩家。 例如,用戶可以在他的家中或其他任何地方構建腳本陷阱。

這是我的問題:

  1. 安全

    如何確保所提供的代碼僅被強制調用所提供的API(類)的內容? 為了防止欺騙腳本,惡意活動......

    有沒有辦法在某種VM或低信任環境中運行已編譯的代碼?

  2. 速度

    這種方法會足夠快嗎? (每隔一幀或每隔一幀調用多達100個自定義程序集的功能)。 關於這個的任何提示?

    也許通過將所有用戶內容編譯成一個大型組件或其他任何東西來獲得速度優勢?

  3. 尺寸

    如何使編譯后的代碼變小(除了壓縮它)? 因為玩家可能需要下載數十個腳本......

    有沒有辦法去除不是絕對​​必要的東西? 像調試信息或類名等...

運行時編譯對我來說是相當新的(這就是我在這里問的原因)。 因此,指出一些重大的初學者錯誤和/或安全問題會很好。

編輯:

只是為了澄清:用戶插件/腳本或任何你想要調用它的類將是一個類(也用C#編寫),它必須實現特定的功能,如“GetAddonInfo”,“Init”,“Update”...就像一個普通的C#類,派生自我的抽象“Addon”類。

您想看一下舊的Microsoft示例項目的這種返工

http://terrarium2.codeplex.com/

它基本上做你想要的一切。

將代碼編譯為DLL並在environemnt中運行它們

檢查允許的API調用。

等等

重寫了第2版以利用Web服務和許多其他功能。 從您的問題來看,您可能對Terrarium 1更感興趣。但是,我似乎無法追蹤它,因此您可能必須“解決”更復雜的2.0版本。

查看MEF和MAF - 它們都是旨在將C#和VB腳本添加到現有應用程序的框架。 您可以為腳本創建appdomain,然后使用代碼訪問安全性嚴格限制這些腳本可以執行的操作。

這個問題可能有所幫助

在MEF和MAF之間選擇(System.AddIn)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM