通过部分受信任的代码使用库

更新:2010 年 7 月

注意注意

本主题介绍具有强名称的程序集的行为,并且仅适用于级别 1 程序集。.NET Framework 4 版或更高版本中的安全透明的代码,级别 2 程序集不受强名称的影响。有关对安全系统所做的更改的更多信息,请参见 .NET Framework 4 中的安全性更改

不允许从其宿主或沙盒接收低于完全信任的级别的应用程序调用共享托管库,除非库编写器通过使用 AllowPartiallyTrustedCallersAttribute 特性明确允许它们调用。 因此,应用程序编写器必须注意到在部分受信任的上下文中它们可能不能使用某些库。 默认情况下,在部分信任沙盒中,以及不在完全信任程序集列表中执行的所有代码都是部分受信任的。 如果您的代码预期不会在部分受信任的上下文中执行或由部分受信任的代码调用,则您不必了解本节中的信息。 但是,如果您编写的代码必须与部分受信任的代码交互或在部分受信任的上下文中运行,则您应该考虑以下因素:

  • 必须用强名称对库进行签名以使该库被多个应用程序共享。 通过使用强名称,可以将您的代码放置在全局程序集缓存中,或将其添加到沙盒 AppDomain 的完全信任列表中,并允许使用者确保特定的移动代码段实际上是由您提供的。

  • 默认情况下,具有强名称的级别 1 共享库会自动执行隐式 LinkDemand 以实现完全信任,库编写器无需执行任何操作。

  • 如果调用方不具有完全信任,但仍尝试调用这样的库,则运行时将引发 SecurityException 并且不允许该调用方链接到该库。

  • 为了禁用自动 LinkDemand 并防止引发异常,您可以将 AllowPartiallyTrustedCallersAttribute 特性放置在共享库的程序集范围内。 此特性允许通过部分受信任的托管代码调用您的库。

  • 对于通过此特性被授予库访问权限的部分受信任的代码,仍需遵循由 AppDomain 定义的进一步的限制。

  • 部分受信任的代码无法通过编程的方式调用不具有 AllowPartiallyTrustedCallersAttribute 特性的库。

特定应用程序专用的库不需要强名称或 AllowPartiallyTrustedCallersAttribute 特性,这些库也不能被应用程序之外的潜在恶意代码引用。 部分受信任的移动代码不会有意或无意滥用此类代码,且无需开发人员执行任何额外操作。

对于以下类型的代码,您应该考虑显式启用供部分受信任的代码使用:

  • 已对安全脆弱性进行反复测试并且符合安全代码指南中所述准则的代码。

  • 专门为部分受信任的方案编写的具有强名称的代码库。

  • 使用强名称签名的任何组件(无论是部分受信任还是完全受信任),这些组件将由从 Internet 上下载的代码调用。

注意注意

.NET Framework 类库中的某些类不具有 AllowPartiallyTrustedCallersAttribute 特性,这些类不能由部分受信任的代码调用。有关可由部分受信任的代码调用的类的列表,请参见标有 AllowPartiallyTrustedCallersAttribute 的 .NET Framework 程序集

请参见

概念

代码访问安全性

修订记录

日期

修订记录

原因

2010 年 7 月

对内容进行了少许更新。

内容 Bug 修复