.Net安全编程实战(一)

.Net安全编程实战最近看了一些关于.Net安全编程方面的资料,把自己的理解拿出来分享一下。

     在深入了解.Net在安全性方面提供的支持之前,还是先说点理论。 .Net运行时为不同的应用程序模型提供了一个运算平台,它不仅仅是为单机应用程序提供了运行环境,更重要的是它还为分布式系统, 基于组件的系统以及基于Web的系统(如Asp.net和Web service)都提供了安全稳定的平台。为什么说.Net安全而且稳定,因为有.Net运行时(CLR),CLR是什么不是这里讨论的重点,但是它带来了和以前Win32代码的本质不同的地方,它所有的代码都是由CLR控制的,而不是象以往直接以PE文件格式被载入和运行的二进制码,它的每一条指令都会在被载入的时候被CLR转换成机器码执行(CLR运行时是由一个COM进程mscorlib.dll加载的,扯远了,参考相应的资料)。正是因为如此,CLR对代码有控制和管理的能力(这也是.Net的代码称之为托管代码的原因),所以只要在CLR中设立一套机制就可以很容易的对代码的执行进行控制,使得任何代码在执行的时候进行一些安全性上的检查。我们把这种安全性成为Code Access Security(简称CAS),可以看到它针对的对象是代码,而不是以往基于角色的安全管理。当然.Net也提供了其他两种安全机制,他们存在的目的包括了基于角色管理的安全机制,以和以前的系统安全机制兼容,别忘记了,.Net还能执行非托管代码啊。:)

总的来说,有三种安全方面的解决方案:

·         Role-based security(基于角色的安全性)

·         Code-access security(代码访问安全性)

·         Isolated storage(隔离存储)下面一一解释这些解决方案。

1.       基于角色的安全性: Windows自带了一个帐户系统,这是常识了,因此是谁在运行代码,肯定也很容易知道。.Net根据登陆用户的身份运行代码,也可以根据这个信息判断用户是否具备执行代码的权限。

2.       代码访问安全性:这个是我想说的重点。代码来验证代码,是这种机制的本质。那为什么需要这样的机制呢。举个例子,假如你开发了一个库,功能强大,什么都可以做,可以改注册表,删除文件,格式化硬盘…现在你把它发布了,突然你发现有些恶意的用户就用你这个库来做些损害系统的事情,比如格掉你的硬盘,这个你可不希望,你只希望有些程序具有这个权限来调用你的这个库,因此你就告诉这个库,只有具有什么什么权限的代码才能调用里面的方法,现在别人再想调用,对不起,必须具备某个权限才行,要不一调用就抛安全异常。在实际应用中经常会需要代码访问安全性。比如我只希望某些程序集才能调用我的库,或者限制一些功能,比如不允许某个程序集创建应用程序域,那我就不授予用户创建应用程序域的权限,这时候该程序集调用Assembly.Load就不能成功,因为Assembly的这个方法需要有创建程序域的权限。你甚至可以自己定义权限哦。比如你写了一个程序集,只允许某些具有特定签名(用你的证书签名)的应用程序调用,你就可以杜绝别人来直接使用你的库。后面我们将详细讨论这种机制

3.       隔离存储:程序运行的状态是在内存中的,当你关闭应用程序的时候,你可能希望能够保存这个应用程序中的某些状态,把这些状态(对象)存储到硬盘上这个过程叫做持久化。但是持久化的数据是保存在磁盘上的,那意味着别人也可以访问你的持久化的数据,用他自己的程序载入修改。但是有了隔离存储机制,你可以为你的数据创建一个空间,只有你的程序集能读取和存储,保证其他应用程序无法获取你的持久化数据。这就是隔离存储机制要完成的。   说了这么多,接着我们讨论的重点将是CAS,缺省状态下你根本就不会知道有这么个东东,那是因为微软屏蔽了这些概念,把权限缺省情况下都赋予了程序集,但是当你真的考虑到安全性的时候,你就该注意了。

Now, let’s start…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值