扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:Demien Watkins 2007年10月26日
关键字:
无论何时向运行库中加载程序集时,宿主环境都会向安全系统提供该程序集的证据。证据构成了向代码访问安全性策略系统输入的内容,这些输入决定了程序集会收到哪些权限。
.NET 框架附带了一些类,在安全系统中,这些类被用作标准形式的证据:
Zone :与 Internet Explorer 中使用的区域具有相同的概念。
URL :一个标识特定资源的特定 URL 文件位置,如 http://www.microsoft.com/test。
Hash :使用像 SHA1 这样的散列算法生成的程序集散列值。
Strong Name :程序集的强名称签名。强名称代表一种版本化、加密的加强方式,用于引用和标识特定签名方的一个(或全部)程序集。有关详细信息,请参阅 .NET Framework SDK。
Site :代码来自的站点。URL 比站点的概念更具体;例如 www.microsoft.com 就是一个站点。
Application Directory :要从中加载代码的目录。
Publisher certificate :程序集的 Authenticode 数字签名。
注 从理论上说,任何托管代码都可以组成证据。上面只是一些在 .NET 框架中具有相应成员条件的类型,因此可以将它们集成到安全策略中,而不必编写自定义安全对象。有关安全策略和代码组的详细信息,请参阅下面的内容。
下面的程序是证据的一个简单示例,其中证据是在加载程序集时被传递到运行库安全系统的。在本例中,mscorlib 是加载的程序集,它是包含了许多运行库类型(如 Object 和 String)的程序集。
using System; using System.Collections; using System.Reflection; using System.Security.Policy; namespace AssemblyEvidence { class Class1 { static void Main(string[] args) { Type t = Type.GetType("System.String"); Assembly a = Assembly.GetAssembly(t); Evidence e = a.Evidence; IEnumerator i = e.GetEnumerator(); while(i.MoveNext()) Console.WriteLine(i.Current); } } }
程序的输出显示了对于此程序集向安全系统传递了哪些证据。为简洁起见,已对下面的输出进行了编辑。安全系统采用这个证据,然后根据管理员设置的安全策略为该程序集生成了一个权限集。
<System.Security.Policy.Zone version="1"> <Zone>MyComputer</Zone> </System.Security.Policy.Zone> <System.Security.Policy.Url version="1"> <Url> file:///C:/winnt/microsoft.net/framework/v1.0.2728/mscorlib.dll </Url> </System.Security.Policy.Url> <StrongName version="1" Key="00000000000000000400000000000000" Name="mscorlib" Version="1.0.2411.0"/> <System.Security.Policy.Hash version="1"> <RawData>4D5A90000300000004000000FFFF0000B8000000000000... 0000000000000000000000000000000000000000000000000000 </RawData> </System.Security.Policy.Hash>
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者