3

当我创建 Azure ASP.NET 应用程序时,默认情况下 .NET 信任级别是完全信任。我总是将其更改为类似于 ASP.NET 的中等信任级别的 Windows Azure 部分信任。

您可以通过在角色上选择属性时使用 GUI 或通过在定义文件 (.csdef) 中将 enableNativeCodeExecution 设置为 false 来执行此操作,如下所示:

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

作为具有安全意识的开发人员,我希望默认情况下以部分信任模式运行我的应用程序,以提供更高级别的安全性。如果我需要使用反射或 P/Invoke 之类的东西,作为开发人员,我想自己做出降低信任级别的决定。

我确信微软决定使用完全信任作为默认的 .NET 信任级别是有原因的,我只是看不到它。如果你知道原因,或者你认为你知道,请告诉我。

4

4 回答 4

2

P/Invoke 不仅需要完全信任以进行 .NET 反射。结果,几乎所有中等规模的应用程序都需要完全信任,因为几乎所有广泛使用的库也需要它(例如 NHibernate)。实际上,我也在 Azure 论坛上提出了完全相反的问题

于 2010-01-13T09:05:37.323 回答
1

完全或部分信任的问题与应用程序运行的环境有关。您拥有的环境和程序集的控制和/或“所有权”越多,拥有完全信任设置就越容易接受。

例如,如果您创建一个 Azure 网站(2012 年 7 月功能),并且模仿 wordpress 或 Umbraco,您的网站允许下载和安装任意程序集插件,那么拥有部分受信任的环境很重要。您无法控制或拥有的下载和执行的插件之一可能包含恶意软件。这不仅会影响您网站的安全性和稳定性,而且有些人可能会认为它会影响与您的网站无关的其他(多租户)托管网站。

当然,您的网站将依赖 3rd 方库,例如 Log4Net 或 StructureMap,但这些都是非常知名且经过审查的库,它们的安全影响没有问题。因此,如果您正在运行 Azure Web 角色(少得多的“多租户”类型事务)并且您只是在运行此类“受信任”的第 3 方应用程序,那么完全信任运行确实没有问题。

于 2012-12-14T18:09:35.057 回答
0

是的,不幸的是,编写在部分信任下运行的大型 .NET 应用程序仍然非常困难(如果不是不可能的话)。

我们需要更好的技术和工具(比如 CAS.NET)

于 2012-01-31T12:06:57.053 回答
0

因为 Medium Trust 现已正式过时。如果您在 Visual Studio 中启动一个新的 Web 项目,它已经需要完全信任(并且不能使用部分信任)。微软表示:不要依赖 Medium Trust,而是使用 Full Trust,将不受信任的应用程序隔离在单独的应用程序池中。

资料来源:

Stackoverflow 答案:引用响应 ASP.NET 团队

微软:ASP.NET 部分信任不保证应用程序隔离

微软:ASP.NET Web 开发最佳实践

于 2014-03-10T13:20:58.663 回答