白帽子讲web安全——访问控制

上一章说的认证与会话管理,这章是访问控制,刚看访问控制这章的时候,感觉跟上章的“授权”没什么区别,第一感受就是“授权”。

  之后看了才进一步了解,“授权”是好比屋子的主人进来了,那么他可以坐在客厅,也可以进到卧室睡觉,这种情况下就可以说他具有屋子的“最高权限”。如果进来的是客人,那么他可能就仅仅被允许在客厅的了。“授权”在这层上面可以理解的就是被允许做的事情,但是在一个系统中,怎么去限制一个客人只能够待在客厅里面的。这就是“访问控制”来做的事情了,“访问控制”也即是“权限控制”。抽象地说,都是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制

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

  在一个安全系统中,确定主体的身份是“认证”解决的问题;而客体是一种资源,是主体发起的请求的对象。在主体对客体进行操作的过程中,系统主体不能“无限制”地对客体进行操作,这个过程就是“访问控制”。

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

 

只是自己平时遇到的在访问控制环节可能的漏洞:

  • 未授权访问,这个是指web网页的未授权访问
  • 垂直越权
  1. 登录界面会遇到的多,修改用户名
  2. 登录时,修改可能POST的角色ID
  3. 访问其它权限网页时,修改URL中某个参数
  • 水平越权
  1. 同一级的角色,可以获取别人的信息,修改URL中参数ID

以上是暂时想到的,之后再扩展补充。

 

  对于垂直越权,提出的“基于角色的访问控制”来限制,spring security 中的两种权限管理方式,“基于URL的访问控制”、“基于方法的访问控制”。都是以RBAC模型来实现的,在spring security中都是验证该用户所属的角色,以决定是否授权。

  对于“基于URL的访问控制”,spring security使用配置文件对访问URL的用户权限进行设定,如下:

<sec:http>
    <sec:intercept-url pattern="/president_portal.do**" access="ROLE_PRESIDENT" />
    <sec:intercept-url pattern="/manager_portal.do**" access="ROLE_MANAGER" />
    <sec:intercept-url pattern="/**" access="ROLE_USER" />
    <sec:form-login />
    <sec:logout />
</sec:http>

  不同的URL对于能访问其的角色有着不同的要求。

posted @ 2018-11-15 16:55  素衣染天香  阅读(563)  评论(0编辑  收藏  举报