权限越权概念
一、核心定义
权限越权(Privilege Escalation),通俗来讲就是:一个用户(或程序)访问了他本不应该有权限访问的资源或执行了本不应该有权限执行的操作。
简单比喻:
你的公司门禁卡只能刷开你所在楼层的门(这是你的正常权限)。
如果你用某种方法刷开了CEO办公室或者机房的门,这就是“越权”。
二、两种主要类型
权限越权通常分为两种类型:
1. 水平越权(Horizontal Privilege Escalation)
定义:同级别用户之间的越权。用户A和用户B属于同一个权限级别(例如都是普通用户),但用户A能够访问或操作用户B的个人数据。
例子:
在一个网盘或社交网站中,你通过修改浏览器地址栏的链接参数(例如将
user_id=123
改为user_id=124
),竟然成功看到了另一个用户的私密照片或文件。这就是典型的水平越权漏洞。外卖App中,你能看到并修改别人的订单,而不是只能操作自己的订单。
2. 垂直越权(Vertical Privilege Escalation)
定义:低权限用户获取了高权限用户的权限。这是更严重的一种越权,通常意味着普通用户获得了管理员(Admin)或超级用户的权限。
例子:
一个普通论坛用户,通过技术手段(比如构造特殊的请求或利用后台漏洞)进入了网站的后台管理系统,并获得了删除帖子、封禁用户等管理员才能做的操作。
在一个公司系统中,一个普通员工通过某种方式获得了财务总监的审批权限,可以审批巨额报销单。
简单区分:
水平越权:侵犯了同类用户的权益。(你动了同事的抽屉)
垂直越权:侵犯了系统的权益,危害更大。(你坐上了老板的椅子并使用了他的公章)
为了更直观地理解两者的区别和危害,请看下面的对比表格:
特征 | 水平越权 (Horizontal) | 垂直越权 (Vertical) |
---|---|---|
权限关系 | 同级别用户之间 | 低级别用户获取高级别用户权限 |
本质 | 用户A越界访问了用户B的数据 | 用户升级了自己的权限等级 |
危害对象 | 单个或多个用户的数据安全 | 整个系统的安全和控制权 |
严重程度 | 中高 | 严重(通常为高危漏洞) |
经典例子 | 修改URL参数查看他人订单、私信 | 普通用户进入后台,获得管理员功能 |
比喻 | 你用同事的工卡刷开了他的储物柜 | 你伪造了一张能打开所有门禁的“万能卡” |
三、为什么会出现权限越权漏洞?
根本原因在于:服务器端没有对发来的请求执行充分的权限校验。
仅依赖前端校验:前端(如网页、App)隐藏了某些按钮或链接,让用户看不到管理员功能。但攻击者可以直接绕过前端,通过工具(如Postman、Burp Suite)直接向服务器发送请求。如果服务器相信了这个请求,漏洞就发生了。
错误的权限假设:程序逻辑认为“用户不会做坏事”,默认用户只会按照正常流程操作,没有在每一个关键操作(如查询、修改、删除)前都检查一次“当前登录的用户是否有权操作这个目标数据”。
可预测的标识符:使用简单、连续的数字ID作为资源标识(如订单号、用户ID),非常容易被猜测和篡改。
四、如何防止权限越权?
防止越权的黄金法则:永远不要信任客户端传来的任何信息,在服务器端进行严格的权限验证。
实施访问控制策略:
对每一个访问请求,都检查你是谁(认证 Authentication)和你有没有权限做这个事(授权 Authorization)。
特别是对于修改、删除、查询等操作,必须验证当前用户ID与目标资源的所有者ID是否匹配。
遵循“最小权限原则”:
只授予用户完成其任务所必需的最小权限。普通用户绝对不应该拥有管理员权限。
使用不可预测的标识符:
尽量避免使用自增数字ID,可以使用UUID(通用唯一识别码)等难以猜测的字符串作为资源标识。
后台严格校验:
所有权限检查必须在服务器端完成,前端隐藏按钮只是一种用户体验优化,绝不能作为安全手段。
总结
权限越权是一个严重的安全漏洞,意味着系统“认错了人”或“没查证件”,导致用户访问了超出其权限范围的内容。水平越权是“串门”,垂直越权是“夺权”。防止它的核心在于服务器端对每一次请求都进行严格的、不留死角的权限验证。