2010-01-10 44 views
3

當我創建Azure ASP.NET應用程序時,默認情況下,.NET信任級別爲「完全信任」。我總是將其更改爲類似於ASP.NET中等信任級別的Windows Azure部分信任。默認情況下,爲什麼Azure Web角色在完全信任中運行?

您可以通過使用GUI做時,你的角色或通過定義文件(.csdef)設置enableNativeCodeExecution爲false選擇屬性,就像如下:

<WebRole name="ServiceRuntimeWebsite" enableNativeCodeExecution="false"> 

作爲一個安全意識的開發者,我默認情況下希望以部分信任模式運行我的應用程序,從而提供更高級別的安全性。如果我需要使用Reflection或P/Invoke之類的東西,作爲開發人員,我希望自己做出降低信任級別的決定。

我確定微軟決定使用完全信任作爲默認的.NET信任級別是有原因的,我只是看不到它。如果你知道原因,或者你認爲你知道,請告訴我。

回答

2

完全信任不僅僅需要用於.NET反射的P/Invoke。作爲底線的結果,幾乎所有中等大小的應用程序都需要完全信任,因爲幾乎所有的普及庫都需要它(例如NHibernate)。其實,我也一直在從Azure論壇的exact opposite question問。

0

是的,不幸的是,編寫運行在部分信任下的大型.NET應用程序仍然非常困難(如果不是不可能的話)。

我們需要更好的技術和工具(如CAS.NET)

1

全部或部分信任問題涉及到環境,使您的應用程序運行。您擁有的環境和裝配的控制權和/或「所有權」越多,擁有完全信任的設置就越可接受。例如,如果您創建了Azure網站(2012年7月的功能),並且模仿WordPress或Umbraco,則您的網站允許下載和安裝任意組裝插件,那麼擁有部分信任環境很重要。下載並執行的一個插件可能是您不能控制或擁有的,其中包含惡意軟件。這不僅會影響您網站的安全性和穩定性,還會影響其他(多租戶)託管網站,這些網站與您的網站沒有任何關係。

當然,您的網站將依賴於第三方庫,如Log4Net或StructureMap,但這些庫是非常知名且經過審查的庫,對其安全影響不存在疑問。 Ergo,如果你正在運行一個Azure網絡角色(一個更不「多租戶」類型的事務),而你只是運行這樣的「可信任」的第三方應用程序,那麼真正不存在作爲完全信任運行的問題。

0

由於中等信託現已正式過時。如果您在Visual Studio中啓動新的Web項目,則它已經要求完全信任(並且不能部分信任)。微軟表示:不要依賴中等信任,而是使用完全信任,並將不受信任的應用程序隔離在單獨的應用程序池中。

來源:

Stackoverflow answer: Quoted response ASP.NET team

Microsoft: ASP.NET Partial Trust does not guarantee application isolation

Microsoft: ASP.NET web development best practices

相關問題