2012-08-10 93 views
2

我知道在Java中運行的Windows服務在安全級別上存在缺陷,因爲這意味着JVM正在服務線程中運行,因此增加了潛在威脅的數量。C#Windows服務的安全

C#怎麼樣? C#在CLR上運行(Common Language Runtime)所以當我說它可能會導致一些嚴重的安全漏洞時我錯了嗎?

+1

比較什麼?它的所有灰色陰影。你需要什麼級別的保護?你需要防範哪些威脅。把你的電腦放在法拉第籠中,斷開任何外部電線,不要讓其他人觸摸它並記住,切勿打開它。 – Jodrell 2012-08-10 15:49:24

+0

我同意@Jodrell所說的,我補充說,如果您不會以您想到的具體威脅來增強您的問題,我會投票以「不具建設性」的方式來結束它。 – 2012-08-10 15:50:33

+0

我在那裏投票結束,當我說灰色陰影我不暗指一些高估的通勤情色。 – Jodrell 2012-08-10 15:55:08

回答

4

那麼CLR實現了幾個安全措施,實際上提供了額外的安全層,並避免了JVM的一些缺陷。

首先你的代碼是你的,它會執行,它不會像在Java中那樣被解釋和運行在虛擬機上。當你在.NET中生成一個程序集或一個exe文件時,你會得到IL代碼,也就是中間語言代碼。

然後,IL將Just In Time編譯爲機器碼,然後執行機器碼。沒有虛擬機解釋它,一旦代碼被編譯到你的特定機器的彙編器中,它就像任何其他用標準語言編寫的程序一樣執行。

執行.NET程序時,程序中的第一條指令實際上會加載CLR,CLR會依次查找程序的主入口點並開始執行。 CLR加載程序位於mscorlib.dll中,該程序依次位於GAC中。

現在,GAC本身確實包含一些安全措施,其中最重要的是位於GAC中的程序集(當然包括來自Microsoft的程序集)強烈命名,換句話說,它們已被簽名。

Microsoft保留其私鑰併爲任何版本簽署.NET Framework的每個程序集,然後在GAC上進行安裝時,會根據Microsoft公鑰檢查該簽名以查看它們是否匹配。當您使用Visual Studio引用.NET Framework版本時,雖然可以在通過命令行進行編譯期間明確完成該過程,但該過程會自動完成。

因此總之,不,它不會導致相同的安全漏洞。

+0

同意,CLR比JVM更安全 – Jodrell 2012-08-10 15:51:53

+0

哇好的解釋!然而,這篇文章沒有提及,所以它就像維基百科的「引用需要」類似的東西。無論如何,很好的演示文稿,Upvoted :) – Rajesh 2012-08-10 16:00:23

+0

這一切都很清楚地在CLR中通過C#第3章進行了解釋。這就是我首先獲得知識的地方,但我無法明確地鏈接到這一點...... – 2012-08-10 16:02:11