千里之行,始于足下
酌贪泉而觉爽,处涸辙而犹欢
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
::
34 随笔 :: 0 文章 :: 192 评论 :: 10 引用
2006年4月5日
#
学习一下 .net framework 中有关安全的内容
好容易在繁重的开发任务之余抽出点时间学习一些东西。发现机子里有几个关于 System.Security 内容的示例,这一个命名空间以前还真是从来没用过,正好拿来学习一下。由于不是系统的学习,不好组织,想了想,就以示例来说明吧。
一、设定权限
1
[FileIOPermission(SecurityAction.Demand, Write
=
"
C:\\temp.txt
"
)]
2
public
class
App : System.Windows.Forms.Form
3
{
4
//
略
5
}
FileIOPermissionAttribute 定义于 System.Security.Permissions 里。它继承于 SecurityAttribute,在这个例子中,要求使用 App 类时必须具有对 C:\temp.txt 文件的写权限。
.net framework 的文档中关于安全要求有这样一段话:“若要确保只有被授予了指定权限的调用方才能够调用您的代码,可以声明方式或强制方式要求您的代码的调用方拥有特定的权限或权限集。要求使运行库执行安全检查,从而对调用代码实施限制。在安全检查过程中,运行库遍历调用堆栈,检查堆栈中每个调用方的权限,然后确定是否已将要求的权限授予每个调用方。如果发现某个调用方没有要求的权限,则安全检查失败,并引发
SecurityException
。”
例子中,权限是以声明的方式出现的。SecurityAction.Demand 可以作用于类或方法,在这里是作用于类上。Write 是 FileIOPermission 的属性之一,其它常用属性还有 Read、Append、All 等等。
SecurityAction 枚举中还有一些值是作用于 assembly 上的。比如以下的例子:
[assembly:SecurityPermission(SecurityAction.RequestMinimum ,UnmanagedCode
=
true
)]
SecurityAction.RequestMinimum 是请求运行的最小权限。这一行要求程序集允许调用非托管代码。
除了声明方式外,还可以使用强制方式。如下的代码:
1
FileIOPermission filePerm
=
new
FileIOPermission(FileIOPermissionAccess.AllAccess,
"
C:\\temp.txt
"
);
2
try
3
{
4
filePerm.Demand();
5
6
//
Code to access file goes here
7
}
8
catch
(SecurityException excep)
9
{
10
MessageBox.Show (excep.Message);
11
return
;
12
}
13
二、用户角色管理
用户及其角色的管理是在许多程序中都要使用到的。如今 asp.net 2.0 对于这方面有了大大增强,开发人员不需要很了解技术就可以做出很不错的应用。不过对于 Windows Form 应用程序来说,不少地方还需要程序员自己设定。
假定我们已知晓了 userName 以及它所属于的 roles,那么可以这样来设置当前线程的 Principal:
1
GenericIdentity genIdent
=
new
GenericIdentity(userName);
2
GenericPrincipal genPrin
=
new
GenericPrincipal(genIdent, roles);
3
Thread.CurrentPrincipal
=
genPrin;
4
随后我们有三种办法来进行用户角色验证。
第一种方法是使用 GenericPrincipal.IsInRole 方法:
1
GenericPrincipal currentPrin
=
Thread.CurrentPrincipal
as
GenericPrincipal;
2
3
if
(currentPrin
!=
null
&&
currentPrin.IsInRole(
"
Manager
"
))
4
{
5
//
略
6
}
7
第二种方法则是使用 PrincipalPermission 类,类似于权限设定中的强制方式:
1
PrincipalPermission prinPerm
=
new
PrincipalPermission(
null
,
"
Manager
"
);
2
3
try
4
{
5
prinPerm.Demand();
6
7
//
do something
8
}
9
catch
10
{
11
//
error handling
12
}
第三种方式则类似于权限设定中的声明方式:
1
private
void
DecPermButton_Click(
object
sender, System.EventArgs e)
2
{
3
try
4
{
5
performManagerAction();
6
//
do something
7
}
8
catch
9
{
10
//
error handling
11
}
12
}
13
14
[PrincipalPermission(SecurityAction.Demand, Role
=
"
Manager
"
)]
15
void
performManagerAction()
16
{
17
}
关于安全的另一个重要内容是加密。今天没空写了,改天再说。
posted @ 2006-04-05 16:33 sunwaywei 阅读(1298) 评论(2)
编辑
<
2006年4月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
公告
我,一个兼职程序员,以做开发为主,但喜好研究技术。有一份与编程无关的主职工作,读过本科和研究生,不过都是与编程没什么关系的专业。对自己的总体评价:博杂有余,专精不足。
MSN:gcx_zw1027@163.com
昵称:
sunwaywei
园龄:
5年10个月
粉丝:
1
关注:
0
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
最新随笔
1. 被MM当成电脑白痴了
2. 用Delphi编写的一个上网助手
3. Excel 2007的日期格式设置
4. 使用C++绘制算法弥补.net图形绘制缺陷
5. 使用UpdatePanel控件要注意的一个问题
6. Chuck Jazdzewski 对新手程序员的建议
7. 打赢了一场效率仗
8. 一个极有可能引发ExecutionEngineException的情况
9. 竟然是灰鸽子?
10. They're Back!!! Turbo系列产品的回归!
随笔分类
读史偶得
(rss)
开发心得(9)
(rss)
拦路猛虎(5)
(rss)
生活随想(7)
(rss)
系统维护(2)
(rss)
学习手记(6)
(rss)
最近关注(5)
(rss)
随笔档案
2007年11月 (1)
2007年6月 (1)
2006年12月 (2)
2006年11月 (1)
2006年9月 (2)
2006年8月 (4)
2006年7月 (1)
2006年6月 (4)
2006年5月 (4)
2006年4月 (9)
2006年3月 (5)
朋友的博客
凤翔天翼
悠然天下
鱼的天空
积分与排名
积分 - 65401
排名 - 1629
最新评论
阅读排行榜
评论排行榜
推荐排行榜