目录
1、权限与授权
2、垂直权限管理
3、水平权限管理
4、OAuth
1、权限与授权
权限控制,或者说访问控制,指的是当用户需要执行某个操作时,系统对这种操作的权限限制就是权限控制。
在网络中,一般是通过路由设备或者防火墙建立基于IP的访问控制。
在操作系统中,对于文件也有访问控制,如在Linux中,就可以用r、w、x表示对文件的读、写、执行三种操作,这三种操作同时对应着三种主体:文件拥有者、文件拥有者所在的用户组、其他用户。
在Web应用中,常见的访问控制可以分为“基于URL的访问控制”、“基于方法的访问控制”和“基于数据的访问控制”。
通常网页的未授权访问只是把需要保护的页面“藏”起来,但只要攻击者构造出正确的URL就可以访问到这些页面,通过对后台路径的字典的爆破,很容易得到URL路径。比如管理员页面的URL经常包含admin这样的敏感词汇。
2、垂直权限管理
访问控制实际上是建立用户与权限之间的对应关系,这种基于角色的访问控制,简称RBAC。
RBAC事先在系统中定义出不同的角色,不同角色有不同权限,一个用户可能拥有多个角色,角色之间有高低之分,在系统验证权限时,只需要验证用户所属的角色,再根据角色的权限进行授权。
这种基于角色的权限管理,我们称为“垂直权限管理”。
比如一个普通用户通过某些方法获得了管理员的权限,则发生了垂直越权访问。
3、水平权限管理
通过某种方法可以获得其他同等级用户的权限,称为水平权限越权。
例如用户可通过修改下面地址中的id就可以查看他人的来往信件、查看和修改他人的专辑信息。(优酷网用户越权访问)
在RBAC这种“基于角色的访问控制”的模型下,系统只会验证用户A是否属于角色RoleX,而不会判断用户A是否只能访问只属于用户B的数据DataB,因此,发生了越权访问,这种问题我们就称为“水平权限管理问题”
相对于垂直权限管理来说,水平权限问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可以称为“基于数据的访问控制”。
4、OAuth
OAuth是一个在不提供用户名和密码的情况下,授权第三方应用访问Web资源的安全协议。
OAuth和OpenID都致力于让互联网更加的开放。OpenID解决认证问题,OAuth则更注重授权。
比如在人人网上想要导入MSN里的好友,如果没有OAuth,则需要在人人网上登录MSN,人人网则会掌握用户的MSN的账户和密码。
而使用OAuth使得用户在不需要向人人网提供MSN用户名和密码的情况下仍可以导入MSN好友名单。
在OAuth中,有3个角色:Client消费方、Server服务提供方、Resource Owner用户。在上面的例子中,Client是人人网,Server是MSN,Resource Owner是用户。
下图是新浪微博OAuth的授权过程。