我没有在一个页面中清楚地看到此定义:部分受信任的呼叫者。

我正在研究APTCA,并且经常提到它,但是MSDN上没有关于它的文章。

我只有一些线索,但我不是100%肯定。


从网络共享执行的代码是否被称为“部分受信任的呼叫者”?即使以管理员身份运行它(Windows UAC)?
.NET应用程序以“部分受信任”身份运行的其他方式有哪些?
什么是ASP.net环境中的“部分受信任的调用者”?


我遇到过许多文章,涉及有关部分受信任的呼叫者的业务,但没有关于其本质的直接定义。

最佳答案

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

MSDN library for the AllowPartiallyTrustedCallersAttribute Class


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


因此,如果创建的库将被任何没有FullTrust级别的程序集使用,则必须使用APTCA(AllowPartiallyTrustedCallersAttribute)显式声明它。

然后,如何确定应用程序以“完全信任”或“部分信任”运行?

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


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

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


FullTrust:允许完全访问所有资源。
一切:允许完全访问所有资源(组未添加到程序集列表中)
互联网:授予默认权限。
跳过验证:绕过所有安全验证
无:拒绝所有访问,包括执行
执行:允许仅执行访问。



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

但是,.NET 4 introduced significant changes in security


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


实际上,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应用程序。

关于.net - C#:什么是部分受​​信任的调用者?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23882770/

10-13 02:20