【问题标题】:Why Azure Web Role by default runs in the Full Trust?为什么默认情况下 Azure Web 角色在完全信任下运行?
【发布时间】:2010-01-10 17:08:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: azure security azure-web-roles


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          来源:

          Stackoverflow answer: Quoted response ASP.NET team

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

          Microsoft: ASP.NET web development best practices

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-04
            • 1970-01-01
            相关资源
            最近更新 更多