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

您可以在选择角色上的“属性”时使用 GUI 来完成此操作,也可以在定义文件 (.csdef) 中将 enableNativeCodeExecution 设置为 false,如下所示:

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

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

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

有帮助吗?

解决方案

时,不仅需要的完全信任的P / Invoke用于.NET反射为好。作为一个底线的结果,几乎所有的中等大小的应用程序需要完全信任,因为几乎所有的广泛的图书馆需要太(NHibernate的举例)。其实,我已经从的上天青论坛完全相反的问题

其他提示

全部或部分信任问题涉及到您的应用程序运行环境。更控制和/或环境和组件必须的“所有权”,越可接受它是具有完全信任的设置。

例如,如果您创建了一个Azure的网站(2012年7月能力),并模仿Wordpress或一把umbraco,你的网站可以任意组装的插件进行下载并安装,然后它有一个部分信任的环境是很重要的。这可能是下载并执行的插件,你不控制或拥有的一个,包含恶意软件。这不仅影响你的网站的安全性和稳定性,但有些人可能会认为它会影响其他(多租户)托管的Web站点,它们没有什么关系你的。

当然,你的网站将依靠第三方库,如log4net的或StructureMap,但这些都是非常知名和审核是没有问题的图书馆对他们的安全影响。 ERGO,如果你正在运行Azure的网络角色(一个更“多租户”式的恋情),你只是运行的这种“信任”的第三方应用程序,那么就真的没有与运行的完全信任的问题。

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

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

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

资料来源:

堆栈溢出答案:引用 ASP.NET 团队的回复

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top