扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Demien Watkins 2007年10月26日
关键字:
.NET 框架允许开发人员以两种方式表达安全约束。以声明性方式 表达安全约束意味着使用自定义属性语法。这些批注保留在类型的元数据中,在编译时会有效地溶入到程序集中。下面是声明性方式安全的一个示例:
[PrincipalPermissionAttribute(SecurityAction.Demand, Name=@"culex\damien")]
以命令性方式 表达安全要求意味着在运行时创建 Permission 对象的实例并调用它们的方法。下面是本文前面示例中的声明性方式安全的一个示例:
FileIOPermission p = new FileIOPermission( FileIOPermissionAccess.Write, f); p.Demand();
为什么选择一种方式而不选择另一种方式的原因有几个。首先,可以使用声明性方式来表达所有的安全操作;但命令性方式则不行。不过,声明性方式要求在编译时表达所有安全约束,而且只允许在完全方法、类或程序集范围内存在批注。命令性方式更加灵活,因为它允许在运行时表达约束,如对于方法中可能执行路径的子集。将命令性安全要求保留在元数据中的一个副作用是,有一些工具可提取这些元数据信息并根据这些信息提供功能。例如,某个工具可以显示程序集上声明性安全属性集的列表。而对于命令性安全,这种情况是不可能发生的。开发人员需要了解并熟悉这两种方式。
因为按照默认策略,从本地硬盘上执行的代码将会明显比从任何其他位置执行的代码取得更多的信任,所以下载代码、将代码储存到磁盘然后执行它将与从远程位置执行代码具有完全不同的语义。对于以前的系统,这种情况不是很明显,例如浏览器选择的是下载代码而不是远程执行它。这里假定在代码下载后,还会在执行前对它进行检查,比如病毒扫描。使用了代码访问安全性,情况就完全不同了。如果使用默认的安全策略,则将代码作为远程代码执行会明显增加安全性。然而,这时可能会增加系统或用户的负担,因为他们需要知道托管代码和非托管代码的区别。最后是有关运行库安全系统的另一方面。对于旧式安全系统的用户来说,他们应该更熟悉这个系统,因为它是以用户标识为基础的:基于角色的安全性。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者