学习一下.net framework 中有关安全的内容

安全

  好容易在繁重的开发任务之余抽出点时间学习一些东西。发现机子里有几个关于 System.Security 内容的示例,这一个命名空间以前还真是从来没用过,正好拿来学习一下。由于不是系统的学习,不好组织,想了想,就以示例来说明吧。 

  一、设定权限

1[FileIOPermission(SecurityAction.Demand, Write= "C:\\temp.txt")]
2public 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 是请求运行的最小权限。这一行要求程序集允许调用非托管代码。

  除了声明方式外,还可以使用强制方式。如下的代码:

 1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\\temp.txt");
 2try
 3{
 4    filePerm.Demand();
 5   
 6    // Code to access file goes here
 7}
 8catch (SecurityException excep)
 9{
10    MessageBox.Show (excep.Message);
11    return;
12}
13
  二、用户角色管理

  用户及其角色的管理是在许多程序中都要使用到的。如今 asp.net 2.0 对于这方面有了大大增强,开发人员不需要很了解技术就可以做出很不错的应用。不过对于 Windows Form 应用程序来说,不少地方还需要程序员自己设定。

  假定我们已知晓了 userName 以及它所属于的 roles,那么可以这样来设置当前线程的 Principal:

1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, roles);
3Thread.CurrentPrincipal = genPrin;
4
  随后我们有三种办法来进行用户角色验证。

  第一种方法是使用 GenericPrincipal.IsInRole 方法:

1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4{
5    //略
6}
7
  第二种方法则是使用 PrincipalPermission 类,类似于权限设定中的强制方式:

 1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
 2
 3try
 4{
 5    prinPerm.Demand();
 6
 7    //do something
 8}
 9catch
10{
11    //error handling
12}
  第三种方式则类似于权限设定中的声明方式:

 1private 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")]
15void performManagerAction()
16{
17}
  关于安全的另一个重要内容是加密。今天没空写了,改天再说。

时间: 2024-11-02 04:11:05

学习一下.net framework 中有关安全的内容的相关文章

如何学习android源码中的framework,只有java基础

问题描述 如何学习android源码中的framework,只有java基础 求大神指导,如何学习framework?源码里面东西太多,感觉找不到入口 解决方案 从写android应用软件开始,或者上网收集framework的一些讲解资料,网上特别多 解决方案二: 你怎么学习的java就怎么学习Android 解决方案三: 除了努力還是努力加油 解决方案四: 围绕AMS和WMS展开,Android系统核心就这两个,弄懂了这两个服务如何和应用交互的,基本就了解Android系统的运行原理了. 解决

F#入门:使用.NET Framework中的函数式编程技术

本文讨论: 安装 F# F# 语言基础 .NET 互操作性 异步 F# 本文使用了以下技术: .NET Framework, F# 目录 为什么要使用 F#? 安装 F# 您好,F# Let 表达式 关键字 For 管道 F# 也能够处理对象 异步 F# 与 F# 合作 作 为 Microsoft .NET Framework 家族的新成员,F# 提供类型安全.性能以及类似脚本语言的工作能力,所有这些都是 .NET 环境的一部分.此函数式语言由 Microsoft 研究院的 Don Syme 发

.NET(C#) Internals: .NET Framework中已使用的设计模式

--适合有一定设计模式基础和.NET基础的人阅读. 写在前面 "设计模式"我一向是敬而远之的态度,不会去写这方面的文章,原因有二:第一,要想写好设计模式的文章太难,需要笔者丰富的经验:第二,没有深厚的 功底写出的设计模式文章容易误导他人.自认没有深厚的功底,但我不会为了设计模式而设计模式.我想大部分人对设计模式的理解是不够深刻的,不然应用自如, 特别是初学者!所有研究高质量的源码或框架是我们学习实践设计模式的好途径之一. 而我之所以写这篇文章,主要是因为它从.NET Framework

框架-如何在android framework中修改webview禁掉软键盘

问题描述 如何在android framework中修改webview禁掉软键盘 5C 如题,在webview调用的网页中,点击input标签后会弹出软键盘,现在有个需求需要禁用软键盘,用户会通过遥控输入,请问该如何修改 解决方案 调用hideKeyBoard()可以禁用软键盘 解决方案二: 在当前界面 隐藏掉 软键盘 调用hideKeyBoard()可以禁用软键盘 解决方案三: 对应的activity设置windowSoftInputMode-stateAlwaysHidden

在.NET Framework中轻松处理XML数据(三)

xml|数据 带验证的阅读器XmlValidatingReader类实现了XmlReader类,它提供了支持多种类型的XML验证:DTD,XML-Data Reduced(XDR)架构,以及XSD,DTD和XSD都是W3C官方推荐的.而XDR是Microsoft早期用于处理XML构架的一种格式. 你可以用XmlVlidatingReader类去验证XML文档和XML片断.XmlValidatingReader类工作在XML阅读器上面---是一个典型的XMLTextReader类实例.XM

在.NET Framework中轻松处理XML数据(一)

xml|数据 在.NET Framework中,XmlTextReader和XmlTextWriter类提供了对xml数据的读和写操作.在本文中,作者讲述了XML阅读器(Reader)的体系结构及它们怎样与XMLDOM 和SAX 解释器结合.作者也演示了怎么样运用阅读器分析和验证XML文档,怎么样创建格式良好的XML文档,以及怎么样用函数读/写基于Base64和BinHex编码的大型的XML文档.最后,作者讲了怎么样实现一个基于流的读/写分析器,它把读写器都封装在一个单独的类里.大概三年前,

在.NET Framework中轻松处理XML数据(二)

xml|数据 分析属性值 大部分情况下,属性值都是一个简单的文本字符串.然而,这并不意味着实际应用中的属性值都是字符型的.有时候,属性值是由许多种类型的数据组合而成的,例如Date或Boolean,这时,你就要用XmlConvert或System.Convevt类的方法把这些类型转换成原来的类型.XmlConvert和System.Convevt类都能实现数据类型的转换,但是XmlConvert类依据XSD中指定的数据类型进行转换,而不管它现在是什么类型. 假设你有以下的XML数据片

在.NET Framework中轻松处理XML数据(四)

xml|数据 XmlTextWriter类用在本节中的方法创建XML文档显然并不困难.多年以来,开发者都是通过在缓存在连接一些字符串,连接好以后再把缓存中字符串输出到文件的方式来创建XML文档.但是以这种方式创建XML文档的方法只有在你保证字符串中不存在任何细小的错误的时候才有效..NET Framework通过用XMLwriter提供了更好的创建XML文档的方法. XML Writer类以只前(forward-only)的方式输出XML数据到流或者文件中.更重要的是,XML Writ

在.NET Framework中轻松处理XML数据(五)

xml|数据 设计XmlReadWriter类如前面所说,XML reader和Writer是各自独立工作的:reader只读,writer只写.假设你的应用程序要管理冗长的XML文档,且该文档有不确定的数据.Reader提供了一个很好的方法去读该文档的内容.另一方面,Writer是一个非常有用的用于创建XML文档片断工具,但是如果你想要它即能读,又能写,那么你就要用XMLDOM了.如果实际的XML文档非常庞大,又会出现了一个问题,什么问题呢?是不是把这个XML文档全部加载到内存中,然后进