代码访问安全性基础知识
每个以公共语言运行时为目标的应用程序(即每个托管应用程序)都必须与运行时的安全系统进行交互。 在加载某个托管应用程序时,其宿主会自动向其授予一组权限。 这些权限由宿主的本地安全设置或该应用程序所在的沙盒决定。 根据这些权限的不同,该应用程序可能会正常运行,也可能会产生安全性异常。
桌面应用程序的默认宿主允许代码在完全信任环境下运行。 因此,如果您的应用程序以桌面为目标,则其具有一个不受限制的权限集。 其他宿主或沙盒为应用程序提供了一个有限的权限集。 由于此权限集可能因宿主而异,因此您必须将应用程序设计为仅使用目标宿主允许的权限。
为了编写以公共语言运行时为目标的有效应用程序,您必须熟悉下面的代码访问安全性概念:
编写类型安全代码:若要使代码受益于代码访问安全性,必须使用将生成可验证为类型安全的代码的编译器。 有关更多信息,请参见编写可验证为类型安全的代码。
强制性语法和声明式语法:与运行时安全系统的交互使用强制性安全调用和声明式安全调用执行。 声明式调用使用特性执行;强制性调用在代码中使用类的新实例执行。 有些调用只能强制性地执行,有些调用只能以声明方式执行,还有些调用可以按照这两种方式中的任一方式执行。 有关更多信息,请参见安全性语法。
使用安全类库:类库使用代码访问安全性来指定访问类库所需权限。 您应该知道访问您的代码使用的任何库所需的权限。
透明代码:在 .NET Framework 4 版 和更高版本中,除了标识特定权限之外,还必须确定您的代码是否应以安全-透明的方式运行。 安全-透明代码不能调用标识为安全-关键的类型或成员。 此规则适用于完全信任的应用程序和部分信任的应用程序。 有关更多信息,请参见使用安全类库和安全透明的代码。