C#:什么是部分受 信任的呼叫者?

问题描述 投票:16回答:1

我在一页中没有看到明确定义的内容:部分受信任的呼叫者。

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

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

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

[我遇到过很多文章都提到了部分受信任的呼叫者的业务,但是没有关于它们本身的直接定义。

.net security uac code-access-security
1个回答
9
投票

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

MSDN library for the AllowPartiallyTrustedCallersAttribute Class

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

因此,如果要创建一个库,该库将被任何不具有AllowPartiallyTrustedCallersAttribute级别的程序集使用,则必须使用APTCAA llow P artially T rusted C allers A ttribute)。

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

信任级别与AppDomain关联,并且它基于所谓的证据来确定。这都是.NET代码访问安全性的全部。 FullTrust。从那里:

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

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

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

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

但是,This article provides a great overview of its components

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

事实上,.NET 4 introduced significant changes in security

(...)在CLR的第4版中,不建议使用CAS策略,而是将策略决策完全交给应用程序的宿主。但是,属于CAS名称的其他安全机制仍然存在并且受支持。这些机制允许主机配置AppDomain来承载沙盒代码,并允许库作者编写安全的APTCA库,从而使服务完全暴露于部分信任状态。]

因此,在.NET 4更改之后,默认情况下most of CAS was deprecated except for sand-boxed applications such as ASP.NET and ClickOnce和ASP.NET应用程序是完全可信的应用程序。但是,可以通过将ASP.NET 4 security also changed属性设置为与trustLevel不同的值来在配置中更改此设置。

因此,从.NET 4及更高版本进行总结,您可以假定您的应用程序默认情况下以完全信任身份运行,除非您通过配置文件中的Full选择加入CAS。除非您选择设置其他信任级别,否则同样适用于ASP.NET应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.