zoukankan      html  css  js  c++  java
  • ASP.NET安全问题--ASP.NET中的授权问题(前篇)

           前言:之前的一些文章谈了一些有关验证的问题,接下来的一些文章就说下授权以及代码访问安全的问题。
     
           在ASP.NET应用程序中,授权就意味着允许访问资源,资源的形式有很多了:文件,数据库,图片等。授权的处理过程基本上是:创建用户或者用户组,然后为他们分配权限。在.NET Framework中,有很多的方式可以实现授权,如文件授权,URL授权以及自定义的授权。

           下面我们就来谈下ASP.NET是如何控制访问受限资源的,本篇主要讲述下列问题:
           1.基于角色的安全
           2. 权限的映射:
           3.权限对象Permission简介

           本篇的代码不是很多,到了下篇实战篇中尽量给出更多的代码。
     
           1.基于角色的安全
           相信大家多什么是角色的,以及基于角色的安全都有一些了解,他们的概念就不赘述了。在讲述基于角色的安全之前,希望大家对之前讲过的Identity和IPrincipal要了解(如果不是很清楚的,可以参看我之前的安全的系列文章)。
     
           在.NET中,可以用.NET Framework灵活的将用户标识(Identity)和角色相结合,并且为结合后的主体定义权限。我们之前说过:


           主体(IPrincipal)=(用户标识:包含用户名等信息的对象)Identity+角色;
     
           我们可以定义很多的角色,然后为角色定义访问资源的权限。我们一般是定义角色,如定义一个Customer角色,然后使用户的角色为Customer,然后我们定义Customer的访问权限,那么这些访问的权限就应用到了那些角色为Customer的用户上,也就是说,我们并不是为每个用户分别定义权限,因为那样维护和修改起来麻烦。

           当然,我们也可以对特定的用户单独的进行授权,如写入文件。授权的方式很多,但是他们的思想是大体相同的:

            通常,一个应用程序的授权步骤如下:

           1.判断用户是否有合法的访问资源的凭证(也就是我们之前谈论的验证的过程)
           2.拒绝特定的用户访问特定的资源
           3.允许特定的用户访问特定的资源

           2. 权限的映射:

           在.NET 中,有一些内置的Permission对象,它们可以使得用户有合适的权限来访问资源。在讲后面的问题之前,首先说说什么是Permission。我们知道,我们的系统中一般有很多的文件和文件夹,而且这些文件或者文件夹常常都是有访问的权限的,比如,我们可以把一些文件的权限定义为:只能管理员修改,一般的用户只读,这点大家都不陌生了。


           注意:我们是通过系统来配置这些文件或者文件夹的权限的。(大家应该都会)

           我们的网站,实质其实就是放在服务器上的一些文件,既然这些文件在服务器,如Win Server 2003上,那么这些文件肯定是有访问的权限的。如果你是这台服务器的管理员,那么你就可以对这些文件进行任意的操作,其他的用户就没有这个能力了。

           现在我们假设,我们的网站是放在服务器上,而且网站的文件,如aspx页面,图片,App_Code等都在网站的文件夹中,而且这些文件资源的权限早就定义好了,如只读。
     
           其实我们在.NET中的一些Permission类,其实就是权限的映射。怎么说?

           假如我们的网站文件夹中的一个文件,如Admin.aspx页面,我们可以通过操作系统来定义这个文件的访问权限(操作为:选中文件,点击右键,选择"共享和安全",然后选择哪些用户可以访问,而且这些用户的操作是什么,如读,写,安全控制等)。这些都是系统定义的一些权限,.NET Framework就把定义在文件上的一些权限"取出",包装映射在一些Permission类中,这样我们就能用托管代码,如C#来操作这些权限,而不用Win API(非托管代码)来操作。(理解如有问题,欢迎大家指正!)

     

            3.权限对象Permission简介
           下面我们就举一些Permission类的例子.
           FileIOPermission
           PrincipalPermission
     
           这些内置的权限对象都会保护指定的资源。如FileIOPermission对象将确保只允许授权的用户访问一个文件。即,FileIOPermission对象将当前用户的凭证映射在操作系统级别,映射的结果就是该用户和系统中已存在的某一用户的操作权限相同(如IUser),那么现在这个用户就可以设置文件的权限。
     

          FileIOPermission
          FileIOPermission对象要求用户是Windows用户,或者ASP.NET处理过程运行在一个特定的标识下(一般是ASPNET用户账户),并且根据为文件系统中的文件或者文件夹定义的权限,授予读或者写的权限。即,FileIOPermission对象在文件系统中定义的权限上下文中验证Principal.

           例如,在ASP.NET程序中,我们可能想要在点击按钮之后写入一个文件,那么,文件就应该配置必需的访问权限,并且为登录到应用程序的用户授予必需的权限。
     
           如果想要拒绝访问一个特定的文件夹,如C:\Windows,那么我们就可以通过在运行阶段拒绝对FileIOPermission对象操作的权限来实现。我们就可以在特定的地方写下:

    [FileIOPermissionAttribute("SecurityAction.Deny,All="C:\\Windows")]

     

     

           上面是以声明的方式写的,我们也可以用代码,以后讲述。
     
           其中SecurityAction枚举定义了访问的类型,如拒绝Deny。

           上面的声明可以在类级别,方法级别,以及程序集级别使用。这里只是简单的描述,大家知道就行了,具体的我们后面讲述。
     
     
           PrincipalPermission
           PrincipalPermission确保调用者的上下文具有与之相关联的被请求的Principal。这话有点绕,下面看个例子就明白了:


           下面的代码确保:只运行名为"xiaoyang"的用户访问一个特定的方法:
          

     [PrincipalPermission(SecurityAction.Demand,Name="localhost\\xiaoyang"]

     

     

           将代码放在任何一个方法的声明的上面就行了。


           今天就先写到这里,理论比较多。大家见谅!
           下一篇就讲述ASP.NET中的授权问题。

  • 相关阅读:
    海龟交易
    暑假攻略:怎样让孩子过一个充实又省钱的假期
    值得追随
    在哪里能找的你想要的答案?
    顺势加仓策略
    交易中 你的加仓策略是怎样的?背后的逻辑是什么?
    驻守深寒:寻找那些有效地关键K线
    统计相关
    求助Ubuntu16.10如何设置默认启动为字符界面
    【Linux系列】Ubuntu ping通,xshell无法连接
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1617779.html
Copyright © 2011-2022 走看看