Web应用访问控制

权限控制,或者说访问控制,广泛应用于各个系统中。抽象地说,是某个主体(subject)对某个客体(object)需要实施某种操作(operation),而系统对这种操作的限制就是权限控制。

在网络中,为了保护网络资源的安全,一般是通过路由设备或者防火墙建立基于IP和端口的访问控制。在操作系统中,对文件的访问也要访问控制。比如在Linux系统中,一个文件可以执行的操作分为“读”、“写”、“执行”三种,这三种操作同时对应着三种主体:文件拥有者、文件拥有者所在的用户组、其他用户,主体、客体、操作这个三者之间的对应关系,构成了访问控制列表。

在Web应用中,根据访问客体的不同,常见的访问控制可以分为“基于URL的访问控制”、“基于方法(method)的访问控制”和“基于数据的访问控制”。

 

垂直权限管理

访问控制实际上是建立用户与权限之间的对应关系,现在应用广泛的一种方法,就是“基于角色的访问控制(RBAC:Role-Based Access Control)”,我们可以称之为“垂直权限管理”。

RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一个权限的集合。而系统的所有用户都会被分配到不同的角色中,一个用户可能拥有多个角色,角色之间有高低之分(权限高低)。在系统验证权限时,只需要验证用户所属的角色,然后就可以根据该角色所拥有的权限进行授权了。

Spring Security中的权限管理就是RBAC模型的一个实现。Spring Security 提供了一系列的“Filter Chain”,每个安全检查的功能都会插入在这个链条中。在与Web系统集成时,开发者只需要将所有用户请求的URL都引入到Filter Chain即可。Spring Security提供两种权限管理方式,一种是“基于URL的访问控制”,一种是“基于method的访问控制”,这两种访问控制都是验证用户所属的角色,以决定是否授权。

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

 

水平权限管理

在RBAC模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否能访问只属于用户B的数据DataB,因此发生了越权访问。这种问题我们称之为“水平权限管理问题”。

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

现在数据级权限管理并没有很通用的解决方案,一般是具体问题具体解决。一个简单的数据级访问控制,可以考虑使用“用户组”的概念,比如一个用户组的数据只属于该组内的成员,只有同一用户组的成员才能实现对这些数据的操作。此外,还可以考虑实现一个规则引擎,将访问控制的规则写在配置文件中,通过规则引擎对数据的访问进行控制。

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值