大家好,又见面了,我是你们的朋友全栈君。
1. 基本概念
1.1 横向越权
横向越权:横向越权指的是攻击者尝试访问与他拥有相同(级别或角色)权限的用户的资源。
1.2 纵向越权
纵向越权:纵向越权指的是一个低级别(低权限)攻击者尝试访问高级别(高权限)用户的资源。
1.3 如何防止横向越权漏洞
可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的。
对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等。
防止水平越权的关键是避免用户修改自身的身份标识为其它用户的身份标识。
1.4 如何防止纵向越权漏洞
建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
防止垂直越权的关键是禁止用户自己修改自身的角色或增加自身的权限。
2. 权限控制的四个层面
权限提现在四个层面,分别是增加、删除、修改和查询。
2.1 增加数据
增加数据需要的权限控制主要体现在跨权限的增加数据的控制。
增加业务数据具有变动部分,也有不可变部分(比如用户自身的身份标识),主要控制不可变部分。一种思路是该部分由后台进行填充,不依赖于前端传入,或者对前端传入的数据做严格校验。
增加基础数据(比如用户和角色的对应关系,角色和权限的对应关系等)的权限控制,严格判断用户角色和权限,禁止越权添加。
添加请求的身份标识严格校验或者从后端状态中获取,避免前端传入任意身份标识。
2.2 删除数据
对于删除数据,验证校验删除的数据是否在权限范围内。
删除请求的身份标识严格校验或者从后端状态中获取,避免前端传入任意身份标识。
2.3 修改数据
对于修改数据,验证校验修改的数据是否在权限范围内。
修改请求的身份标识严格校验或者从后端状态中获取,避免前端传入任意身份标识。
2.4 查询数据
对于查询数据,一般根据用户标识进行关联查询即可控制在权限范围内。
查询请求的身份标识严格校验或者从后端状态中获取,避免前端传入任意身份标识。
3. 权限控制技术方法
- web层检查发起请求的用户权限,比如从session信息中获取;
- 通过增加token校验的方式,验证页面提交的不可变信息是否被篡改;
- 数据库表增加ownerId字段,增删改查询时加上其作为where语句条件(即每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问);
- 对所有url资源进行权限验证;
- 对所有的数据访问进行权限验证;
- 记录完善的审计日志;
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149890.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...