通过部分受信任的代码使用库
更新:2007 年 11 月
不允许接收到低于完全信任级别(该信任级别是运行库代码访问安全系统授予的)的应用程序调用共享托管库,除非库编写器通过使用 AllowPartiallyTrustedCallersAttribute 类明确允许它们调用。因此,应用程序编写器必须注意到在部分受信任的上下文中它们可能不能使用某些库。默认情况下,在本地 Intranet 或 Internet 区域中执行的所有代码都是部分受信任的。如果您的代码预期不会在部分受信任的上下文中执行或被部分受信任的代码调用,那么您不需要关心本节中的信息。但是,如果您编写的代码必须与部分受信任的代码交互或在部分受信任的上下文中运行,则您应该考虑以下因素:
必须用强名称对库进行签名以使该库被多个应用程序共享。强名称允许您的代码放置在全局程序集缓存中,并允许使用者验证一块特定的移动代码实际上是源于您的。
默认情况下,具有强名称的共享库自动为完全信任执行隐式 LinkDemand,无须库编写器执行任何操作。
如果调用方不具有完全信任,但仍尝试调用这样的库,则运行库将引发 SecurityException 并且不允许该调用方链接到该库。
为了禁用自动 LinkDemand 并防止引发异常,您可以将 AllowPartiallyTrustedCallersAttribute 属性放置在共享库的程序集范围内。此属性允许通过部分受信任的托管代码调用您的库。
通过此属性被授予对库访问权限的部分受信任的代码仍需要遵循本地计算机策略定义的进一步的限制。
部分受信任的代码无法通过编程的方式调用不具有 AllowPartiallyTrustedCallersAttribute 属性的库。如果某个应用程序在默认情况下不接收完全信任,则管理员必须选择修改安全策略并授予该应用程序完全信任,之后该应用程序才能调用这样一个库。
特定应用程序专用的库不需要强名称或 AllowPartiallyTrustedCallersAttribute 属性,这些库也不能被应用程序之外的潜在恶意代码引用。这样的代码不会受到部分受信任的移动代码的有意或无意的滥用,无须开发人员或管理员进行任何额外的操作。
对于以下类型的代码,您应该考虑显式启用供部分受信任的代码使用:
已对安全脆弱性进行反复测试并且符合安全代码指南中所述准则的代码。
专门为部分受信任的方案编写的具有强名称的代码库。
签有强名称的任何组件(不管是部分受信任的还是完全受信任的),这些组件将被从 Internet 或本地 Intranet 下载的移动代码调用。因为在默认安全策略下移动代码接收部分信任,所以这些组件将受到影响。
安全策略授予低于完全信任的所有代码(如果修改了默认策略)。
说明: .NET Framework 类库附带的某些类不具有 AllowPartiallyTrustedCallersAttribute 属性,这些类不能被部分受信任的代码调用。有关可被部分受信任的代码调用的类的列表,请参见标有 AllowPartiallyTrustedCallersAttribute 的 .NET Framework 程序集。