代码之家  ›  专栏  ›  技术社区  ›  Vadim

为什么默认情况下Azure Web角色在完全信任下运行?

  •  3
  • Vadim  · 技术社区  · 16 年前

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

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

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

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

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

    4 回复  |  直到 7 年前
        1
  •  2
  •   Joannes Vermorel    16 年前

    对于.NET反射的P/Invoke,不仅需要完全信任。作为一个底线,几乎所有中等大小的应用程序都需要完全信任,因为几乎所有广泛的库都需要它(例如nhibernate)。实际上,我一直在问 exact opposite question 也在Azure论坛上。

        2
  •  1
  •   Brent Arias    13 年前

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

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

    当然,您的网站将依赖第三方库,如log4net或structuremap,但这些库是非常知名和经过审查的库,在安全影响方面不存在问题。因此,如果您运行的是一个Azure Web角色(更不用说是“多租户”类型的事务),而您只运行此类“受信任”的第三方应用程序,那么作为完全信任运行确实没有问题。

        3
  •  0
  •   Dinis Cruz    14 年前

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

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

        4
  •  0
  •   Community Mohan Dere    8 年前

    因为媒体信任现在正式过时了。如果您在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