代码访问安全性负责处理执行所授予权限的安全检查。这些安全检查的独特方面是,它们不仅会检查试图执行受保护操作的代码,而且会沿堆栈检查它的所有调用方。要让检查获得成功,所有被检查的代码都必须具有所需权限(可以重写)。
安全检查是有好处的,因为它们可以防止引诱攻击。引诱攻击是指未经授权的代码调用您的代码,并引诱您的代码代替未经授权的代码执行某些操作。假设您有一个读取文件的应用程序,并且安全策略将读取文件的权限授予了您的代码。因为您的所有应用程序代码都拥有权限,所以会通过代码访问安全性检查。但是,如果无权访问文件的恶意代码以某种方式调用了您的代码,那么安全检查将失败,这是因为不受信任的代码调用了您的代码,从而在堆栈上可见。
需要注意的是,该安全性的所有方面都是基于允许代码执行什么操作这一机制的。基于登录信息对用户进行授权是基础操作系统完全独立的安全功能。请将这两个安全系统看作多层防御:例如,要访问一个文件,必须要通过代码授权和用户授权。虽然在许多依赖用户登录信息或其他凭据来控制某些用户可以和不可以执行某项操作的应用程序中,用户授权很重要,但这种类型的安全不是本文讨论的重点。
安全编码的目标我们假设安全策略是正确的,并且潜在的恶意代码不具有授予信任代码的权限,该权限允许受信任代码安全地执行功能更强大的操作。(如果进行其他假设,将使一种类型的代码无法与其他类型的代码区分开,从而使问题不会发生。)使用强制 .NET 框架的权限和代码中实施的其他措施时,您必须建立障碍来防止恶意代码获得您不希望它得到的信息,或防止它执行恶意的操作。此外,在受信任代码的所有预期情况中,必须在代码的安全性和可用性之间找到一种平衡。
基于证据的安全策略和代码访问安全性为实现安全性提供了非常强大的显式机制。大多数应用程序代码只需要使用 .NET 框架实现的基础结构。在某些情况下,还需要其他特定于应用程序的安全性,该安全性是通过扩展安全系统或使用新的特殊方法生成的。
安全编码的方法这些安全技术的一个优点是,您通常可以忘记它们的存在。如果将代码执行任务所需的权限授予代码,那么一切将正常工作(同时,您将能够抵御潜在的攻击,例如,前面描述的引诱攻击)。但是,在某些特定情况下,您必须显式地处理安全问题。下面的几个部分描述了这些方法。即使这些部分并不直接适用于您,但了解这些安全问题总是有用的。
安全中立代码安全中立代码不对安全系统执行任何显式操作。它只使用获得的权限来运行。尽管无法捕获受保护操作(例如,使用文件、网络等)的安全异常会导致不良的用户体验(这是指包含许多细节的异常,但对大多数用户来说这些细节是完全模糊的),但这种方式利用了安全技术,因为即使是高度受信任的代码也无法降低安全保护的程度。可能发生的最坏情况是,调用方将需要许多权限,否则会被安全机制禁止运行。
安全中立库具有您应当了解的特殊特征。假设此库提供的 API 元素需要使用文件或调用非托管代码;如果您的代码没有相应的权限,将无法按描述运行。但是,即使该代码拥有权限,调用它的任何应用程序代码也必须拥有相同的权限才能运行。如果呼叫代码没有正确的权限,那么安全异常将作为代码访问安全性堆栈审核的结果出现。如果可以要求调用方对库所执行的所有操作都拥有权限,那么这将是实现安全性的简单且安全的方式,因为它不涉及危险的安全重写。但是,如果想让调用库的应用程序代码不受权限要求的影响,并减少对非常强大的权限的需要,您必须了解与受保护资源配合工作的库模型,这部分内容将在本文的“公开受保护资源的库代码”部分中进行描述。
文章来源于领测软件测试网 https://www.ltesting.net/