zoukankan      html  css  js  c++  java
  • 新人开车——访问控制

    一、背景

      1、权限控制或者是说访问控制,广泛应用到各个系统中。抽象的说,都是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。

      2、在网络中,为了保护网络资源的安全,一般是通过路由器或者防火墙建立基于ip的访问控制。这种访问控制的“主体”是网络请求的发起方(比如一台PC),“客体”是网络请求的接收方(比如一台服务器),主体对客体的“操作”是对客体的某个端口发起网络请求。这个操作能否执行成功,是受到防火墙ACL策略限制的。

      3、在操作系统中,对文件的访问也有访问控制。此时“主体”是系统的用户,“客体”是被访问的文件,能否访问成功,将由操作系统给文件设置的ACL决定。比如在Linux系统中,一个文件可以执行的操作分为“读”,“写”,“执行”三种,分别由r,w,x表示。这三种操作同时对应着三种主体:文件拥有者,文件拥有者所在的用户组,其他用户。主体、客体、操作这三者之间的对应关系,构成了访问控制列表。

      4、在web应用中,根据访问客体的不同,常见的访问控制可以分为“基于url的访问控制”、“基于方法的访问控制”、“基于数据的访问控制”。

    二、垂直权限管理(RBAC)

      RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色实际上是一个权限的集合。这种基于角色的权限管理,我们可以称为“垂直权限管理”。不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往是被允许的,而低权限角色访问高权限角色的资源往往则被禁止。如果一个本属于低权限角色的用户通过一些方法能够获得高权限角色的能力,则发生了“越权访问”。

      在配置权限时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需求的主体单独配置“允许”的策略。这在很多时候能够避免发生“越权访问”。

    三、水平权限管理

      相对于垂直权限管理来说,水平权限问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可以称为“基于数据的访问控制”。

      水平权限管理问题,至今仍然是一个难题——它难以发现,难以在统一框架下解决,在未来也许会有新的技术用以解决此类问题。

    四、 OAuth简介

      简单一句话,它是一个在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议。

      举一个列子:我打开斗地主此时我有多种方式登录,比如qq登录,这里我选择这种方式,然后会跳转到输入qq账户和密码的页面,输入用户名和密码,然后会出现qq授予斗地主登录的页面,选择授予,就能成功用qq账户登录到斗地主的系统中。

      OAuth与OPenid都是致力于让互联网变得更加开放。openid解决的是认证问题,oauth则更注重授权。认证和授权的关系其实是一脉相承的。

      

  • 相关阅读:
    Python操作MySQL之查看、增删改、自增ID
    MySQL之唯一索引、外键的变种、SQL语句数据行操作补充
    MySQL中出现Unknow column 'xx' in field list的解决办法
    字符集和编码
    Python基础之编译型语言和解释型语言的区别
    Python基础之小整数对象池和大整数对象池
    Python基础之数据类型
    Django实现全文检索
    安全问题-Cookie未设置HttpOnly&&Cookie未设置Secure标识
    基于支付场景下的微服务改造与性能优化
  • 原文地址:https://www.cnblogs.com/hdsec/p/8536126.html
Copyright © 2011-2022 走看看