访问控制安全

简介

  访问控制,或者说权限控制,广泛应用于各个系统中,抽象地说:都是某个主体(subject)对某个客体(object)需要实施某种操作(operation),而系统对这种操作的限制就是权限控制。
  在一个安全系统中,确定主体的身份是“认证”解决的问题;而客体是一种资源,是主体发起请求的对象,在主体对客体操作的过程中,系统控制主体不能无限制地对客体进行操作,这个过程就是访问控制。
  在web应用中,根据访问客体的不同,常见的访问控制可以分为:

  • 基于URL的访问控制
  • 基于方法(method)的访问控制
  • 基于数据的访问控制

垂直权限管理

  访问控制实际上是管理用户和权限之间的对应关系,现在应用广泛的一种方法是:基于角色的访问控制(Role-Based Access Control),简称RBAC。
  RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色就是一个权限的集合。在系统验证权限时,只需要验证用户所属的角色,然后就可以根据该角色所拥有的权限进行授权了。Spring Security中的权限管理,就是RBAC模型的一个实现。Spring Security基于Spring MVC框架,它的前身是Acegi,是一套较为全面的web安全解决方案。
  在权限配置时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需要的主体单独配置“允许”的策略。这在很多时候能够避免发生“越权访问”。

水平权限管理

  相对于垂直权限管理来说,水平权限问题处在同一个角色上。系统只验证能否访问数据的角色,即没对角色内的用户做细分,也没有对数据的子集做细分,因此缺少一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据集的访问控制所造成的,因此水平权限管理又可以称之为“基于数据的访问控制”。  水平权限问题:
1.对于一个大型的复杂系统来说,难以通过扫描等自动化测试方法将这些问题全部找出来。
2.对于数据的访问控制,与业务结合得十分紧密。有的业务有数据级访问控制的需求,有的业务则没有。要清楚不同业务的不同需求,也不输是件容易的事。
3.如果在系统上线后再来处理数据级访问控制问题,则可能会涉及跨表、跨库查询,对系统的改动较大,同时也可能会影响到性能。

OAuth简介

  OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议。OpenID解决的是认证问题,OAuth则更注重授权。常见的OAuth应用场景,一般是某个网站想要获取一个用户在第三方网站中的某些资源或服务。

小结

  安全系统中的核心:访问控制。垂直权限管理:基于角色的访问控制;水平权限管理:基于数据的访问控制。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容