05服务器 访问控制

权限的问题,都可以归为 访问控制。

在正常情况下,管理后台的页面应该只有管理员才能够访问,但这些系统未对用户访问权限进行控制,导致任意用户只要构造出了正确的 URL, 就能够访问到这些页面。所以,只是把这些页面“藏起来”是不行的,攻击者惯用伎俩是使用一部包含了很多后台路径的字典,把这些“藏”起来的页面扫出来(感觉有一期找工作的节目,面试者找到了58同城的一个url,应该是一样的办法),所以说需要加上“基于页面的访问控制”。

RBAC (role-based access control), 基于角色权限的访问控制,就是说要先定义角色,然后用户有不同的角色,角色之间有高低之分(权限高低),在Spring security 中的权限管理,就是 RBAC 模型的实现。 Spring Security 提供两种权限管理方式,一种是“基于URL的访问控制”,一种是“基于method的访问控制”,这两种都是 RBAC 模型的实现。

这种基于角色的权限管理,我们称为“垂直权限管理”。

水平权限管理,仅仅有垂直权限管理是不够的,比如下边例子:优酷网用于越权访问.

用户登录后,可以通过以下方式查看到他人的来往信件。

从这个例子中我们可以看到, 用户访问了原本不属于他的数据,用户 A 与用户 B 可能都属于同一个角色,但是用户A与用户B都各自拥有一些私有数据,在正常情况下,应该只有用户自己才能访问自己的私有数据。但是 RBAC 只会验证用户是否属于这个角色,而不会判断用户A是否能访问只属于用户B的数据dataB, 因此发生了越权问题,此时需要水平权限管理. 因为水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此也叫“基于数据的访问控制”

水平管理是一个难题,可以考虑使用“用户组”的概念,即组内的用户拥有方法数据的权限.

OAuth

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

OAuth 和 OpenID 都致力于让互联网变得更加开放,OpenID解决的是认证问题,OAuth则更注重授权。

OAuth 委员会实际上是从 OpenID 分离出来的.

常见的OAuth 的应用场景: 一般是某个网站想要获取一个用户在第三方网站中的某些资源或服务. 比如在人人网上, 逍遥导入用户MSN里的好友, 在没有OAuth时,可能需要用户向人人网提供MSN用户名和密码. 这种做法使得人人网会持有用户的MSN账户和密码,虽然人人网会承诺密码安全,而OAuth解决了这个信任问题, 它使得用户在不需要向人人网提供MSN用户名和密码的情况下,可以授权MSN将用户的好友名单提供给人人网.

在OAuth1.0中, 涉及3个角色:

  • Consumer: 消费方(Client)
  • Service Provider: 服务提供方(Server)
  • User:用户(Resource owner)

Client 是人人网, Server 是 MSN, Resource Owner 是用户

来看一个实际的场景: 假设 Jane 在 faji.com 上有两张照片, 她想要把这两张照片分享到 beppa.com 上, 通过OAuth, 那么怎么做呢?

(Jane 是用户, faji.com是  server,  beppa 是 client)

1. Jane 在 bappe 上选择上传照片(照片来源于 faji)

2. 在 bappe 的后台, 会创建临时的凭证(Temporary Credentials), 稍后Jane 将持此临时凭证前往faji.com

3. 然后页面跳转到 faji.com 的 OAuth 页面, 并要求 Jane 登录(此步骤可以验证Jane的身份), 注意这里是在 faji.com上登录.

4. 登录成功后, faji.com 会询问 Jane 是否授权 beppa.com 访问 Jane 在 faji.com 的私有照片. 

5. 如果Jane点"Approve", faji.com 会将Jane带来的临时凭证标记为"Jane已经授权", 同时回传给 beppa.com(带上这个临时凭证), 凭此,beppa.com 知道它可以去获取Jane的私有照片了.

对于 beppa.com 来说, 它首先通过 “request token” 去faji.com 换取了 "Access Token", 然后可以用"Access Token" 访问资源了. Request Token 只能用于获取用户的授权,Access Token 才能用于访问用户的资源.

对应下边的过程:

所以, 如果用户在步骤1的页面选择了照片从 fiji 来,bappe 首先向faji 申请一个 request token, (由faji 创建一个request token, 返回给bappe),

bappe 获得了这个request token 之后, 返回重定向授权页面给用户.(这个授权页面是 faji 的)

获得了用户的授权后, faji 生成了 access token, 并将 access token 返回给 bappe.

bappe 获得了 access token 之后, 可以凭借 access token 访问 faji.com 上该用户的照片了.

猜你喜欢

转载自www.cnblogs.com/moveofgod/p/12362027.html
今日推荐