最近系统的安全渗透测试中,检测出存在垂直越权和水平越权的漏洞。确实项目的权限管理,只是限制到菜单和按钮粒度,没有细到业务代码的每个接口上。在此记录一下自己的修复思路。

一、什么是垂直/水平越权?

水平越权

何为水平越权呢?就是相同权限用户之间在未经授权的情况下,可以访问到一方的资源。比如说同是一个网站的普通用户A和B,A通过越权操作访问了B的信息。

例如用户A与用户B属于同一角色,拥有同样菜单权限,但他们拥有私人的客户数据(A私有数据,B私有数据),假如B用户获取到了某条A私人数据信息(例如数据id),通过调用同样的查询接口,成功查询了到该私人数据的详细信息,那么这种行为就叫做水平越权访问。

垂直越权

垂直越权呢,就是低权限用户实现了高权限用户的功能。比如普通用户通过越权登录到了管理员页面,实现管理员才能的操作。

例如管理员A可查看编辑系统所有人员信息,普通用户B只能查看编辑自己部门的人。但是用户B通过抓包获取了其他部门用户C的id,调用修改接口,成功把18岁的C改成了38岁。那么这种行为就叫做垂直越权访问。

二、如何防范?

由于,我接手这个漏洞时,修复时间很紧迫,所以就用了最简单粗暴的方式。

思路

利用每个模块的查询功能,默认所见即为你可以操作。在每个接口执行前,默认查询该登陆用户的查询所有结果,再将执行的业务数据id对比查询结果,如果在其中则正常操作,如果不在其中则抛出越权结果。

实现

1、自定义注解,将注解放在需要鉴权的接口上,并写上接口所属模块,方法

2、利用springboot的AOP面向切面编程,按注解切,在每个接口执行前做查询结果校验处理

优化:

1、利用注解上的模块名与方法名,用策略模式,统一编写不用模块,方法的参数处理。

2、查询性能上的优化

附上自己的统一参数处理代码编写:

/*** @Author: dyf* @Date: 2020/5/8 21:09* @Description:*/
public enum ModuleParam {SYS_ORG("sysOrg"),RIVER_USER("riverUsers"),RIVER("riverInfo"),RIVER_STAGE("riverStageInfo"),LAKE("lakeInfo"),LAKE_SLICES("lakeSlicesInfo"),RESERVIOR("reservoirInfo"),RESERVIOR_SLICES("reservoirSlicesInfo"),BOARD("board"),POLICY("policy"),ARCHIVES("archives"),CAMERA("camera"),NOTICE("notice"),COMPANY("company");String name;IGetParam getParam;ModuleParam(String name) {this.name = name;}public ModuleParam initMethod(String methodType){switch(methodType){case "update":getParam = new GetUpdateId();break;case "query":getParam = new GetQueryId();break;case "del":getParam = new GetDelId();break;//按需自定义,初始化...}return this;}public String getId(Object object){return (String) getParam.getId(name, object);}public List<String> getIds(Object object){return (List<String>)getParam.getId(name, object);}}
public interface IGetParam {Object getId(String methodType, Object object);
}public class GetDelId implements IGetParam {@Overridepublic Object getId(String moduleName, Object object) {switch (moduleName){case "sysOrg":case "riverUsers": return ((BaseEntity)object).getId();case "riverInfo":case "reservoirInfo":case "lakeInfo": ((DeleteParamDTO)object).getId();case "riverStageInfo":case "reservoirSlicesInfo":case "lakeSlicesInfo": return ((ArrayList<String>)object);case "board":case "policy":case "archives":case "camera":case "notice": return ((List<String>)object);case "company": return (String)object;}return null;}
}public class GetQueryId implements IGetParam {@Overridepublic String getId(String moduleName, Object object) {switch (moduleName) {case "sysOrg":case "riverUsers":case "riverInfo":case "riverStageInfo":case "reservoirInfo":case "reservoirSlicesInfo":case "lakeInfo":case "lakeSlicesInfo":case "board":case "policy":case "archives":case "company":case "camera":case "notice":return (String)object;}return "";}
}public class GetUpdateId implements IGetParam {@Overridepublic String getId(String moduleName, Object object) {switch (moduleName) {case "sysOrg":return ((SysOrg) object).getId();case "riverUsers":return ((RegisterUser) object).getId();case "riverInfo":return ((River) object).getId();case "riverStageInfo":return ((RiverStageAddDTO) object).getId();case "reservoirInfo":return ((Reservoir) object).getId();case "reservoirSlicesInfo":return ((ReservoirSlicesAddDTO) object).getId();case "lakeInfo":return ((Lake) object).getId();case "lakeSlicesInfo":return ((LakeSlicesAddDTO) object).getId();case "board":return ((BulletinBoardAddDTO) object).getId();case "policy":return ((PolicyInfoResultDTO) object).getId();case "archives":return ((ArchivesInfoResultDTO) object).getId();case "company":return ((RCompanyInfo) object).getId();case "camera":return ((RCamera) object).getId();case "notice":return ((Notice) object).getId();}return "";}
}

总结:

我的解决方法,比较粗暴,虽然是暂时解决了问题,但是每一个操作都需要查询所有,带来的性能问题是一个隐患,但考虑到系统本身也只是一个业务系统,没有多少并发,所以可以用此方式苟延残喘下去。

附上网上查询的一些防范越权漏洞的方法:
1、调用功能前验证用户是否有权限调用相关功能(也就是我这种方式)
2、执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
3、控制参数,加密资源ID,防止攻击者枚举ID,敏感数据特殊化处理。但参数加密仅仅只能防止的是遍历,并不能真正解决越权,还只是缓解的方式;
4、永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤

系统垂直越权与水平越权漏洞修复记录相关推荐

  1. 渗透测试-越权漏洞之垂直越权和水平越权

    越权漏洞之垂直越权和水平越权 文章目录 越权漏洞之垂直越权和水平越权 前言 一.什么是越权漏洞以及漏洞产生的原因 1. 什么是越权漏洞 2. 漏洞产生的原因 二.水平越权和垂直越权以及防御方法 1.水 ...

  2. 越权分为水平越权和垂直越权

    越权分为水平越权和垂直越权 水平越权:"基于数据的访问控制"设计缺陷引起的--权限相等者互相查看:用户A可以访问用户B的信息 实现思路:用户登录界面抓包,看http头部数据,从登录 ...

  3. 心脏出血漏洞修复记录

    步骤一: 将openssl升级至无漏洞版本http://blog.csdn.net/xiaowenk/article/details/77525046 但是检测后网站依然存在心脏出血漏洞问题未得到解决 ...

  4. httpd服务器常见漏洞修复,Apache漏洞修复记录

    一.慢http攻击漏洞 1.在Apache中配置reqtimeout_module设置header和body的最大响应时间. Apache配置 保存后重启Apache. 再进行测试可以看到,受到攻击后 ...

  5. Weblogic漏洞修复记录

    1.CVE-2018-2628.CVE-2018-2893 以上两个漏洞均是针对weblogic的t3服务进行攻击,如果有条件的,可以从oracle官网下载最新的补丁安装http://www.orac ...

  6. 业务逻辑漏洞之水平越权和垂直越权

    越权漏洞原理 浏览器对用户提交的数据请求没有经过严格的权限设置,导致用户可以拥有观察或更改其他用户信息的功能. 越权漏洞被分为两类 一类是水平越权,一类是垂直越权. 水平越权 :用户在权限相同级别下的 ...

  7. WEB漏洞-逻辑越权之水平垂直越权

    水平垂直越权 水平,垂直越权,未授权访问 解释 原理 利用 修复防御方案 案例 pikachu-本地水平垂直越权演示 水平越权 垂直越权 墨者水平-身份验证失效漏洞实战 越权检测-Burpsuite插 ...

  8. 网络安全笔记 -- 逻辑越权(水平垂直越权)

    1. 逻辑越权 越权: 水平越权.垂直越权 登录 暴力破解 本地加密传输 Cookie脆弱 Session劫持 密文对比认证 业务: 订单ID.手机号码.用户ID.商品ID等 数据: 支付篡改.数量篡 ...

  9. php 水平越权,水平越权与垂直越权

    越权漏洞 越权访问(Broken Access Control,简称BAC)是Web应用程序中一种常见的漏洞,由于其存在范围广.危害大,被OWASP列为Web应用十大安全隐患的第二名. 该漏洞是指应用 ...

  10. 如何解决水平越权(横向越权)和纵向越权

    目录 水平越权(横向越权) 采用token+手机号解决水平越权 纵向越权 纵向越权解决方法 水平越权(横向越权) 水平越权指的是获取了同级别用户的权限:例如A登陆自己的商城,却能够看到B的订单. 采用 ...

最新文章

  1. PAT题解-1118. Birds in Forest (25)-(并查集模板题)
  2. 软件测试随手记(转)
  3. Servlet的体系结构 || Servlet相关配置
  4. gdb调试fork多进程
  5. matplotlib color可选
  6. LeetCode 135 分发糖果
  7. 腾讯云直播sdk_官方推荐 | 2分钟带你认识腾讯云直播 CSS
  8. PostgreSQL的安装和启动方法大全
  9. Spring Boot基础学习笔记22:自定义用户控制、登录与退出
  10. 安装CentOS步骤
  11. 数学原理(The Principles of Mathmatics)
  12. cannot open shared object file
  13. 自适应数字加密/收藏品NFT市场网站HTML5模版
  14. 机械原理习题-(附答案)
  15. 两片8-3优先编码器转化为16-4线优先编码器真值表--python实现
  16. Exchange 2013/2016/2019修改附件大小限制
  17. 一键装机linux_linux系统学习第十八天《搭建一键装机平台》终结篇
  18. 【定时任务】Springboot定时任务
  19. js处理时间戳转成日期格式
  20. 云服务器Windows 2012 IIS添加站点绑定域名的方法?

热门文章

  1. android 微信跨境支付,微信跨境支付已在超过49个境外国家和地区合规接入
  2. 如何做架构设计和评审
  3. python文件加密
  4. 数据结构算法(2)--字符串匹配
  5. volatility命令
  6. Arduino 下使用ws2812b 16*16 led点阵屏显示汉字,规避FastLED的大坑
  7. 2021年度汇总丨20大热门TWS耳机功能配置汇总解析
  8. 转:德鲁克:放弃昨天,是变革的第一原则
  9. 携程Java后台开发三面面经
  10. 基于韦东山视频 regulator 学习笔记