包含vb.netsha1的词条( 三 )


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