我还没有在一个页面中明确定义:部分受信任的呼叫者。
我正在研究APTCA并且总是提到这一点,但是MSDN没有关于它的文章。
我只有一些线索,但我不是百分百肯定。
我遇到过许多文章,提到有关部分受信任的来电者的业务,但没有直接定义它们本身的内容。
答案 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应用程序。