包含vb.netrsa的词条( 五 )


根据许可请求的类型,策略系统可以进一步限制给予组合的许可(删除不必要的许可)或甚至拒绝将组合装入内存(如果运行组合所需的最小许可没有被策略给予) 。在不存在任何许可请求的情况下,组合永远不会被给予多于策略系统将会给予的许可权限,请求只是进一步限制得到的许可 。
安全策略包含了许多代码组,这些组包含了根据证据应给予的许可权 。代码组描述的许可可提供给从特定的安全区域获得的组合,或提供给由特定发行商签名过的组合,等等 。尽管随CLR发行了一组默认的代码组(及相关许可),但管理员可以对这些CLR安全的进行定置,以适合他们的特殊需求 。记?。?通过定义与证据相关的代码组,任何东西都可以作为证据提交,只要安全策略可以使用它 。
创建许可的的过程涉及到对证据的评估,以确定代码组适用于哪个等级:企业,机器,和用户 。策略按上面顺序对这三个等级进行评估 , 然后创建交插了三个等级的许可设置 。管理员可以将任何一个策略等级标记为终结(final),这样做应付阻止在其它等级上对策略做进一步评估 。例如,管理员可以在机器级别上对组合终止策略,这样就会阻止用户级策略对该组合的应用 。
一旦策略完成,许可的最初设置也就创建了 。组合通过从三个方面做出特定的请求可以优化这些许可:
· 第一方面是指定为了使组合运行它必须拥有的最小许可设置 。如果这些许可没有给予,那么组合将不同调入到内存,并抛出例外 。
· 第二,可以指定一组可选的许可 。尽管组合希望存在这些许可,但如果无法获得这些许可,它仍可以调入到内存 。
· 最后 , 行为特别好的组合实际上会拒绝它们所不需的有风险的许可 。这三个优化选项是调入时作为声明语句实现的 。
在运行时,许可是根据代码的执行计算的 。右侧的图总结了这个过程的发生顺序 。组合A3将它的证据和来自主机的证据提供给策略评估器 。策略评估器在创建许可时也要考虑从组合得到的许可请求,"G3" 。组合A3由组合A2调用,而A2又是由组合A1调用的 。当组合A3执行一个引发安全检查的操作时,A2和A1获得的许可同样也要进行检查 , 以确保它们拥有A3所请求的许可权限 。在这个过程中 , 此过程称为堆栈遍历(walking),堆栈中每个组合的许可权限都要进行检查以确定所给予的权限设置是否包含安全检查所需要的许可 。如果堆栈中的每个组合被给予了安全检查所需要的许可,调用将成功 。如何任何组合没有给予所需要的许可,堆栈遍历过程失败,安全例外将被抛出 。
图 1.主机和组合为策略评估器提供证据,评估器使用安全策略和许可请求确定组合的许可权限 。应用程序中不同运行组件的许可权限然后用于作出授权决定 。
代码访问安全堆栈遍历可以保护代码不受攻击 。在精通的攻击中,恶意代码欺骗受信任代码执行它独自不能运行的操作--有效地利用代码的许可权限实现恶意的目的 。对这类攻击,开发人员很难进行防备--但堆栈遍历确保了如果涉及到了低级信任等级的代码,有效许可将被减少到信任等级最低的代码具有的许可 。
结果,代码将从源处获得不同的信任等级,并在适合于特定的代码执行环境的限制下运行 。
.NET Framework调用的"自由"安全性
一些活动 , 如读写文件,显示对话框,读写环境变量,可以通过包含在框架安全构架中的.NET Framework方法实现 。这就使.NET Framework能根据安全策略允许或不允许一个操作,而不需要程序员做额外的工作 。尽管暴露了保护资源的管理类的创建者在他们的库中做了明确的安全需求,使用.NET Framework类库访问受保护资源的开发人员可以自由地利用代码访问安全系统;他们不必作出明确的安全调用 。

推荐阅读