当我创建Azure ASP.NET应用程序时,默认情况下.NET信任级别为完全信任。我总是将其更改为Windows Azure部分信任,这类似于ASP.NET的中等信任级别。
您可以在角色上选择“属性”时使用GUI,也可以在定义文件(.csdef)中将enableNativeCodeExecution设置为false,如下所示:
<WebRole name="ServiceRuntimeWebsite" enableNativeCodeExecution="false">
作为一名注重安全的开发人员,我希望默认情况下以部分信任模式运行我的应用程序,以提供更高级别的安全性。如果我需要使用像Reflection或P / Invoke这样的东西,作为开发人员,我想做出自己降低信任级别的决定。
我确信微软决定使用完全信任作为默认的.NET信任级别是有原因的,我只是没有看到它。如果你知道原因,或者你认为你知道,请告诉我。
答案 0 :(得分:2)
完全信任不仅是P / Invoke for .NET反射所必需的。作为一个底线结果,几乎所有中等规模的应用程序都需要完全信任,因为几乎所有广泛使用的库也需要它(例如NHibernate)。实际上,我也一直在Azure论坛上exact opposite question询问。
答案 1 :(得分:1)
完全或部分信任的问题与运行应用程序的环境有关。您拥有的环境和程序集的控制和/或“所有权”越多,拥有完全信任设置就越可接受。
例如,如果您创建Azure网站(2012年7月的功能)并模仿wordpress或Umbraco,您的网站允许下载和安装任意组装插件,那么拥有部分受信任的环境非常重要。下载和执行的其中一个您无法控制或拥有的插件可能包含恶意软件。这不仅会影响您网站的安全性和稳定性,而且有些人可能认为它会影响与您无关的其他(多租户)托管网站。
当然,您的网站将依赖第三方库,例如Log4Net或StructureMap,但这些库是非常着名且经过审查的库,这些库对其安全影响不存在疑问。如果你正在运行一个Azure网络角色(一个更少“多租户”类型的事件)并且你只是运行这样的“可信”第三方应用程序,那么运行完全信任就没有问题。
答案 2 :(得分:0)
是的,遗憾的是,编写以部分信任方式运行的大型.NET应用程序仍然非常困难(如果不是不可能)。
我们需要更好的技术和工具(如CAS.NET)
答案 3 :(得分:0)
因为Medium Trust现已正式废弃。如果在Visual Studio中启动新的Web项目,则它已经需要完全信任(并且不能部分信任)。微软表示:不要依赖中信任,而是使用完全信任,并在不同的应用程序池中隔离不受信任的应用程序。
来源:
Stackoverflow answer: Quoted response ASP.NET team
Microsoft: ASP.NET Partial Trust does not guarantee application isolation