C#:什么是部分受​​信任的来电者?

时间:2014-05-27 06:47:33

标签: .net security uac code-access-security

我还没有在一个页面中明确定义:部分受信任的呼叫者。

我正在研究APTCA并且总是提到这一点,但是MSDN没有关于它的文章。

我只有一些线索,但我不是百分百肯定。

  • 从网络共享执行的代码是否有资格成为“部分受信任的来电者”?即使我们以管理员身份运行它(Windows UAC)?
  • .NET应用程序以“部分受信任”的形式运行的其他方式是什么?
  • 什么是ASP.net环境中的“部分受信任的来电者”?

我遇到过许多文章,提到有关部分受信任的来电者的业务,但没有直接定义它们本身的内容。

1 个答案:

答案 0 :(得分:9)

具有FullTrust以外的信任级别的任何呼叫者都是部分信任呼叫者。

来自MSDN library for the AllowPartiallyTrustedCallersAttribute Class

  

允许部分受信任的代码调用程序集。如果没有此声明,只有完全信任的调用者才能使用该程序集。

因此,如果要创建的库将由没有FullTrust级别的任何程序集使用,则必须使用APTCA明确声明它。

然后,当应用程序作为完全或部分信任运行时,如何确定它?

信任级别与AppDomain关联,并根据所谓的证据确定。这是.NET代码访问安全性的所有部分。 This article provides a great overview of its components。从那里:

  

CAS使用证据识别程序集,可以通过一些元素来识别程序集,例如位置,哈希码和程序集的签名。证据是运行时收集有关程序集的信息,以确定程序集所属的代码组。代码组依次为程序集授予权限集。

     

权限集是安全配置的唯一组合,用于确定有权访问计算机的每个用户可以在该计算机上执行的操作。 .NET Framework附带了多个权限集,如下表所示:

     
      
  • FullTrust:允许完全访问所有资源。
  •   
  • Everything:允许对所有资源的完全访问权限(组未添加到程序集列表中)
  •   
  • 互联网:授予默认权利。
  •   
  • SkipVerification:绕过所有安全验证
  •   
  • 没有:拒绝包括执行在内的所有访问
  •   
  • 执行:允许仅执行访问。
  •   

因此,通过检查执行程序集,CLR将确定应用程序何时是完全信任或部分信任。这会影响允许该应用程序执行的操作,例如访问文件系统,或允许调用哪些库(如果是部分信任应用程序,则标记为APTCA)。

然而,.NET 4 introduced significant changes in security

  

默认情况下,在v4.0下运行时,非托管应用程序不受托管安全策略的约束。实际上,这意味着您从命令提示符或双击Windows资源管理器中的.exe启动的任何托管应用程序都将完全受信任,它加载的所有程序集(包括从其他位置加载的程序集)都将运行完全受信任的程序集。可执行文件所在的目录。)

事实上,most of CAS was deprecated except for sand-boxed applications such as ASP.NET and ClickOnce

  

(...)在CLR的第4版中,CAS策略已被弃用,而策略决策则完全由应用程序的主机决定。但是,名为CAS的其他安全机制,允许主机配置AppDomain来托管沙盒代码,并允许库作者编写一个安全的APTCA库,将服务暴露给部分信任绝对仍然存在并得到支持。

因此,在.NET 4更改后,ASP.NET 4 security also changed和ASP.NET应用程序默认为完全受信任的应用程序。但是,可以通过将trustLevel属性设置为不同于Full的值来更改配置。

总而言之,从.NET 4及更高版本开始,您可以假设您的应用程序默认运行为完全信任,除非您通过配置文件中的LegacyCasPolicy选择加入CAS。除非您选择设置不同的信任级别,否则同样适用于ASP.NET应用程序。