概要
横向越权和纵向越权是什么以及治理方法
基本概念
-
横向越权: 横向越权指的是攻击者尝试访问与他拥有相同(级别或角色)权限的用户的资源。
-
纵向越权:纵向越权指的是一个低级别(低权限)攻击者尝试访问高级别(高权限)用户的资源。
如何防止
防止横向越权的关键是避免用户修改自身的身份标识为其它用户的身份标识。
可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的。
例如:登录后服务端随机生成一个Token值返回,并给Token设置过期时间(如30分钟),后续请求接口均带上token
防止纵向越权的关键是禁止用户自己修改自身的角色或增加自身的权限。
建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
权限控制的四个层面
- 增加
- 删除
- 修改
- 查询
请求的身份标识严格校验或者从后端状态中获取,避免前端传入任意身份标识。
权限控制技术方法
- web层检查发起请求的用户权限,比如从session信息中获取;
- 通过增加token校验的方式,验证页面提交的不可变信息是否被篡改;
- 数据库表增加ownerId字段,增删改查询时加上其作为where语句条件(即每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问);
- 对所有url资源进行权限验证;
- 对所有的数据访问进行权限验证;
- 记录完善的审计日志;