逻辑越权漏洞根源于业务逻辑缺陷,而非代码语法错误;其核心是后端未校验请求者身份与目标资源归属的一致性,导致水平越权(同级用户间篡改id访问他人数据)、垂直越权(低权限用户执行高权限操作)及未授权访问(无认证直连敏感接口)三类风险。

逻辑越权漏洞不藏在代码语法里,而藏在“谁该看什么、谁该动什么”的业务判断中;只要后端没校验请求者身份与目标资源归属的一致性,前端再严的按钮禁用、菜单隐藏都形同虚设。
水平越权:改个 user_id 就能看别人数据?
这是最典型的越权场景:普通用户 A 查自己订单时请求 /api/order?order_id=1001,把 order_id 换成 1002 就能查到用户 B 的订单——说明后端只查了数据库,没验证这个 order_id 是否属于当前登录用户。
- 测试时优先抓包改
id、user_id、card_id、profile_id这类参数,尤其出现在 GET 查询或 POST 表单提交中 - 注意路径里也可能是越权点,比如
/user/123/profile中的123,不是 URL 参数但同样可篡改 - 响应状态码为
200且返回了他人敏感字段(手机号、邮箱、收货地址)即确认存在 - 别依赖前端是否显示“编辑”按钮——很多系统按钮只是 JS 控制显隐,接口本身完全开放
垂直越权:普通用户带着管理员 Cookie 能删库?
本质是权限粒度失控:后端收到请求后,只检查了 Cookie 是否有效、是否登录,却没检查“当前用户角色是否允许执行该操作”。比如普通用户用自己账号登录后,把请求头里的 Cookie 换成管理员的,就能访问 /admin/user/create。
- 重点测高危功能入口:
/admin/、/api/v1/system/、/manage/等路径下的所有接口,哪怕前端根本没暴露链接 - 用低权限账号登录,手动替换请求头中的
Cookie或Authorization字段为高权限账号的凭证(注意有效期) - 留意响应体是否返回异常数据(如完整用户列表)、状态码是否为
200或201而非403 - 有些系统会校验 Referer 或 User-Agent,但这些头极易伪造,不能作为权限依据
未授权访问:删掉 Cookie 还能进后台?
这类漏洞更隐蔽:接口本应强制鉴权,但开发者漏加了中间件或校验逻辑,导致未登录状态下直接请求 /api/user/settings 也能返回数据。它和越权的区别在于——连身份都不需要伪装,裸连就通。
- 对所有带敏感语义的路径做无 Cookie 请求测试:
/api/profile、/user/history、/payment/list - 用
cURL或 Burp Repeater 清空请求头中所有认证字段,观察响应是否含用户私有数据 - 特别关注“成功响应但数据为空”的情况——可能后端做了空判断但没拦住请求,仍属未授权访问
- 前后端分离项目中,常因 API 网关配置遗漏,导致某组接口绕过统一鉴权路由
绕过前端控制的常见手法与陷阱
前端限制(disabled 按钮、隐藏表单字段、JS 校验)对越权毫无防御力,但排查时容易被它们干扰判断。
- 禁用浏览器 JavaScript 后,直接在控制台用
fetch()构造请求,绕过所有前端逻辑 - 用 Burp Suite 修改请求时,别只盯着参数值——检查是否新增了本不该出现的字段(如
target_user_id) - 某些系统用加密 ID(如 Base64 编码的
{"uid":123,"role":"user"}),看似安全,但若密钥固定或无签名,可解密+重放 - 别忽略文件类接口:
/download?file_id=789改成其他值,可能下载到他人合同、身份证扫描件等敏感文件
真正难防的不是“怎么改参数”,而是“改完之后后端连比对动作都没有”——所有越权漏洞的根因,都是服务端把本该由自己做的权限决策,错误地交给了客户端或信任了未经验证的输入。排查时盯死每个涉及用户数据读写的接口,问一句:它有没有查当前会话的 user_id,再拿这个 ID 去比对数据库里那条记录的归属?没这一步,就是漏洞。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











