SpringWeb项目越权漏洞以及解决方案

本文详细讲解了越权漏洞的分类,包括未授权访问、水平越权和垂直越权,以及如何通过测试方法来检测。提供了SpringBoot中使用Servlet过滤器和MVC拦截器实现权限控制的示例代码,以确保用户访问权限的安全性。

越权漏洞分类

  1. 未授权访问:本来没有账号(即没有某个功能权限),但是通过越权操作,获取了某个功能权限
  2. 水平越权(横向越权):通过越权操作,能操作其他同等权限账号的数据
  3. 垂直越权(纵向越权):低权限用户通过越权操作获取了高权限

测试方法

未授权访问

最简单的测试方法就是不登录用户,直接访问要测试的需要登录的功能模块,如果可以访问成功,则说明存在漏洞。
在这里插入图片描述
我们期望的应该是:
在这里插入图片描述

有些系统是在cookie中添加一个类似userId的字段来标识是否登录成功,这样的系统可以通过伪造cookie信息来进行测试。
在这里插入图片描述
我们期望的应该是:
在这里插入图片描述

水平越权

水平越权常见于业务系统中,例如对用户信息或者订单信息进行增删改查操作时,由于用户编号或者订单编号有规律可循(有序递增,订单编号常发现以日期开头后面再接几位有序增长的数字,类似20200520xxxx1,20200520xxxx2),测试人员通过burpsuite的 intruder对目标参数进行遍历测试即可,如发现用户A能操作用户B的用户信息或者订单信息,则说明存在漏洞,其中用户A和用户B是具有同等权限的用户。
在这里插入图片描述
我们期望的应该是:
在这里插入图片描述

垂直越权

准备两个用户,用户A是一个低权限角色的用户,用户B是管理员角色的用户,对某些应该只有管理员角色才有访问权限的功能模块,使用用户A登录进行访问,如果能正常访问,则说明漏洞存在。这里有些系统是前后端分离,可能直接访问前端用户A是看不到用户B的某些菜单的,可以先使用用户B登录系统,将相关链接或接口记录下来,之后再用用户A登录,来直接访问记录下来的链接或相关接口。
在这里插入图片描述
我们期望的应该是:
在这里插入图片描述

解决方案

对于越权问题的解决思路是对用户访问的资源进行拦截,判断当前用户是否有该资源的权限,如果有则放行,请求用户要访问的资源,如果没有则直接返回相应的提示,不再请求用户要访问的资源。
在SpringWeb项目中要解决越权问题,大体上可以有2种解决方案。

  1. 使用Servlet的过滤器,对请求资源(可以是所有的资源,包括一些静态的资源)进行过滤拦截,对当前用户和当前请求做权限判断(静态资源也需要拦截的使用这种方案)
  2. 使用SpringMVC的拦截器,对请求资源(只能拦截Controller接口资源)进行过滤拦截,对当前用户和当前请求做权限判断(Spring项目推荐使用这种方案)
    这2种方案主要是来解决未授权访问和垂直越权的问题,对于水平越权问题本质上还是要对访问数据做数据权限的控制或者对访问资源做用户隔离(操作数据时带上userId进行操作)这样就可以保证操作不到其他人的数据了。当然如果专门有数据权限的控制,则和垂直越权问题一样来解决。

以下给出两种解决方案的可参考的代码实现(实际使用过程中,根据自身项目情况进行改造)
项目环境:
JDK 1.8
Maven 3.6.3
SpringBoot项目,版本如下

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.5</version>
        <relativePath/>
  </parent>
  <dependencies>
	<!--springboot web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.6.5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值