代码安全维护概述

更新:2007 年 11 月

本节概述了几种不同的代码设计方法来使代码可以在安全系统上运行。

不受安全性影响的代码

不受安全性影响的代码与安全系统没有显式关系。它使用所收到的任何权限运行。虽然未能捕捉到与受保护操作(例如使用文件、联网等)相关的安全异常的应用程序会引发未处理异常,但不受安全性影响的代码还是利用了 .NET Framework 安全技术。

不受安全性影响的库具有一些特征,您应当了解这些特征。假定您的库提供了使用文件的或调用非托管代码的 API 元素,如果代码没有相应的权限,它就不会正常运行。然而,即使代码具有这种权限,调用它的任何应用程序代码也必须具有同样的权限才能正常运行。如果调用代码没有适当的权限,就会出现 SecurityException,这是代码访问安全性堆栈审核的结果。

应用程序代码不是可再次使用的组件

如果代码是一个应用程序的一部分,而该应用程序不会被其他代码调用,那么安全性很简单,可能不需要采取特殊的编码措施。然而,请记住,恶意代码可以调用您的代码。虽然代码访问安全性可以阻止恶意代码访问资源,但是,这类代码仍然可以读取字段或属性的值,而这些字段或属性可能包含重要信息。

此外,如果代码接受了来自 Internet 或其他不可靠来源的用户输入,则必须注意防范恶意的输入。

用于本机代码实现的托管包装

通常在这种情形下,本机代码中实现了某些有用的功能,而您希望托管代码可以使用这些本机代码。使用平台调用或 COM 互操作,可以很方便地编写托管包装。然而,如果这样做,包装的调用方必须具有非托管代码权限才能获得成功。在默认策略下,这意味着从 Intranet 或 Internet 下载的代码不能使用这些包装。

与其将非托管代码权限授予所有使用这些包装的应用程序,不如只将这些权限授予包装代码。如果基础功能没有公开任何资源,而且实现也同样“安全”,包装就只需要断言其权限,这使得任何代码都可以通过该包装进行调用。当涉及到资源时,代码安全维护应当与下一节中所介绍的库代码的情况相同。因为包装可能要公开这些资源的调用方,所以必须对本机代码的安全进行仔细验证,这是包装的责任。

公开受保护资源的库代码

对于代码安全维护,以下是最为有效同时也可能是很危险的方法(如果处理不当的话):库作为其他代码访问特定资源的接口,否则这些资源不可用;就像 .NET Framework 的类为它们所使用的资源实施权限一样。无论在何处公开资源,代码必须首先要求与资源对应的权限(即,执行安全检查),然后,通常会断言它执行实际操作的权限。

请参见

其他资源

代码安全维护指南