2010-01-10 65 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

相关问题