VuePress 站点
首页
数学
计算机基础
Java后端
AI大模型
UI设计
首页
数学
计算机基础
Java后端
AI大模型
UI设计
  • 计算机基础
  • 计算机网络应用

    • 课程笔记:TCP三次握手建立连接
    • 课程笔记:TCP三次握手的必要性
    • 课程笔记:TCP协议缺陷与SYN Flood攻击
    • 课程笔记:TCP四次挥手释放连接
    • 课程笔记:TCP四次挥手释放连接的必要性
    • 课程笔记:TCP 报文段格式与 IP 分组
    • 课程笔记:HTTP/2 新特性——二进制分帧
    • 课程笔记:HTTP/2 新特性——多路复用
    • 课程笔记:HTTP/2 新特性——服务器推送(Server Push)
    • 课程笔记:HTTPS 简介与架构图
    • 课程笔记:HTTPS原理与传输层安全协议(TLS)
    • 课程笔记:HTTPS原理——对称加密算法
    • 课程笔记:HTTPS原理——非对称加密算法
    • 课程笔记:HTTPS 原理 —— 数字签名
    • 课程笔记:HTTPS 原理——证书与 CA
    • 课程笔记:完整的HTTPS协议通信流程
    • 课程笔记:HTTPS 协议的性能损耗
    • 课程笔记:TLS False Start 加速 HTTPS
    • 课程笔记:升级 HTTP 协议到 HTTP/2
    • 课程笔记:通过会话恢复加速 HTTPS
    • 课程笔记:OWASP 组织与十大 Web 安全漏洞
    • 课程笔记:XSS 跨站脚本攻击
    • 课程笔记:存储型XSS跨站脚本攻击
    • 课程笔记:XSS攻击窃取Cookie
    • 课程笔记:反射型XSS跨站脚本攻击
    • 课程笔记:DOM型XSS跨站脚本攻击
    • 课程笔记:植入 JS、HTML 代码攻击
    • 课程笔记:XSS攻击的防护策略
    • 课程笔记:XSS攻击的输入环节防护
    • 课程笔记:XSS 劫持 Cookie 的防护策略
    • 课程笔记:XSS 内容输出防护方案
    • 课程笔记:CSP 内容安全策略
    • 课程笔记:CSP 内容安全策略的应用方式
    • 课程笔记:CSRF 跨站请求伪造攻击原理
    • 课程笔记:CSRF 跨站点请求伪造攻击案例
    • 课程笔记:CSRF 跨站请求伪造防护方案
    • 课程笔记:OWASP CSRFTester 工具的原理与使用
    • 课程笔记:点击劫持攻击原理
    • 课程笔记:点击劫持防护方案
    • 课程笔记:URL 跳转漏洞原理与防护
    • 课程笔记:Session 认证与会话劫持
    • 课程笔记:Session固定与Session保持攻击
    • 课程笔记:注入攻击与 OWASP 靶机平台
    • 课程笔记:SQL盲注与ORM注入攻击及防护
    • 课程笔记:XML注入、代码注入、OS命令注入攻击
    • 课程笔记:文件上传漏洞与文件下载/目录浏览漏洞
    • 课程笔记:访问控制与权限访问漏洞
    • 课程笔记:DDoS 分布式拒绝服务攻击原理与防护
    • 课程笔记:CC(Challenge Collapsar)攻击与防护
    • 课程笔记:CDN 的工作原理
    • 课程笔记:CDN的网络架构和术语说明
    • 课程笔记:CDN应用场景与阿里云CDN
    • 课程笔记:如何使用阿里云CDN服务
    • 课程笔记:CDN 刷新与预热
    • 课程笔记:阿里云 CDN 回源配置
    • 课程笔记:CDN 缓存配置
    • 课程笔记:CDN 访问控制与性能优化
  • 计算机网网络

    • 📖 教材介绍与课程导言
    • 📖 1.1 信息时代的计算机网络
    • 📖 1.2 因特网概述
    • 📖 1.3 电路交换、分组交换和报文交换
    • 📖 1.4 计算机网络的定义和分类
    • 📖 1.5 计算机网络的性能指标(1)
    • 📖 1.5 计算机网络的性能指标(2)
    • 📖 1.6.1 常见的三种计算机网络体系结构
    • 📖 1.6.2 计算机网络体系结构分层的必要性
    • 📖 1.6.3 计算机网络体系结构分层思想举例
    • 📖 计算机网络体系结构中的专用术语
    • 📖 物理层概述
    • 📖 物理层下面的传输媒体
    • 📖 传输方式
    • 📖 编码与调制
    • 📖 2.5 信道的极限容量
    • 📖 2.6 信道复用技术
    • 📖 3.1 数据链路层概述
    • 📖 3.2 数据链路层的三个重要问题
    • 📖 3.2.1 封装成帧和透明传输
    • 📖 3.2.2 差错检测
    • 📖 3.2.3 (1) 可靠传输的相关基本概念
    • 📖 3.2.3 (2) 可靠传输的实现机制 - 停止-等待协议(SW)
    • 📖 3.2.3 (3) 可靠传输的实现机制 - 回退N帧协议(GBN)
    • 📖 3.2.3 (4) 可靠传输的实现机制 - 选择重传协议(SR)
    • 📖 3.3 点对点协议 PPP
    • 📖 3.4 共享式以太网
    • 📖 3.4.1 网络适配器和 MAC 地址
    • 📖 3.4.2 (1) CSMA/CD 协议的基本原理
    • 📖 3.4.2 (2) 共享式以太网的争用期、最小帧长和最大帧长
    • 📖 3.4.2 (3) 共享式以太网的退避算法和信道利用率
    • 📖 3.4.3 使用集线器的共享式以太网
    • 📖 3.4.4 在物理层扩展以太网
    • 📖 3.4.5 (1) 网桥的主要结构和基本工作原理
    • 📖 3.4.5 (2) 透明网桥的自学习和转发帧的过程以及生成树协议STP
    • 📖 3.5 交换式以太网
    • 📖 3.5.1 以太网交换机
    • 📖 3.5.2 共享式以太网和交换式以太网的对比
    • 📖 3.6 以太网的MAC帧格式
    • 📖 3.7.1 虚拟局域网 VLAN 概述
    • 📖 3.7.2 虚拟局域网 VLAN 的实现机制
    • 📖 3.8 以太网的发展
    • 📖 3.9.1 802.11 无线局域网的组成
    • 📖 3.9.2 802.11 无线局域网的物理层
    • 📖 3.9.3 (1) 802.11 无线局域网的数据链路层 —— 使用 CSMA/CA 协议(而不使用 CSMA/CD 协议)
    • 📖 CSMA/CA(载波监听多址接入/碰撞避免)协议的基本工作原理
    • 📖 802.11 无线局域网的 MAC 帧格式
    • 📖 网络层概述
    • 📖 网际协议 IP(网际协议)与异构网络互连
    • 📖 IPv4 地址及其编址方法——概述
    • 📖 IPv4 地址的分类编址方法
    • 📖 IPv4 地址的划分子网编址方法
    • 📖 IPv4 地址的无分类编址方法(CIDR)
    • 📖 IPv4 地址的应用规划
    • 📖 IPv4 地址与 MAC 地址
    • 📖 地址解析协议 ARP
    • 📖 IP 数据报的发送和转发流程
    • 📖 IPv4 数据报的首部格式
    • 📖 静态路由配置
    • 📖 因特网的路由选择协议概述
    • 📖 路由信息协议 RIP(路由信息协议)
    • 📖 开放最短路径优先 OSPF(开放最短路径优先)
    • 📖 边界网关协议 BGP(边界网关协议)
    • 📖 路由器的基本工作原理
    • 📖 网际控制报文协议 ICMP(网际控制报文协议)
    • 📖 虚拟专用网 VPN 和网络地址转换 NAT
    • 📖 IP 多播技术的相关基本概念
    • 📖 在局域网上进行硬件多播
    • 📖 在因特网上进行 IP 多播需要的两种协议
    • 📖 网际组管理协议 IGMP
    • 📖 多播路由选择协议
    • 📖 移动 IP 技术概述
    • 📖 IPv6 引进的主要变化
    • 📖 IPv6 数据报的基本首部和扩展首部
    • 📖 IPv6 地址
    • 📖 从 IPv4 向 IPv6 过渡
    • 📖 网际控制报文协议 ICMPv6
    • 📖 软件定义网络 SDN
    • 📖 运输层概述 — 进程间基于网络的通信
    • 📖 TCP/IP 体系结构运输层中的两个重要协议
    • 📖 运输层端口号、复用与分用的概念
    • 📖 UDP 和 TCP 的对比
    • 📖 TCP 报文段的首部格式
    • 📖 "三报文握手"建立 TCP 连接
    • 📖 "四报文挥手"释放 TCP 连接
    • 📖 TCP 的流量控制 (Flow Control)
    • 📖 TCP 的拥塞控制 (Congestion Control) 及与网际层拥塞控制的关系
    • 📖 TCP 可靠传输的实现
    • 📖 TCP 超时重传时间 (RTO) 的选择
    • 📖 TCP 的选择确认 (SACK)
    • 📖 6.1 应用层概述
    • 📖 6.2 客户—服务器方式和对等方式
    • 📖 6.3 动态主机配置协议 DHCP
    • 📖 6.4 域名系统 DNS
    • 📖 6.5 文件传送协议 FTP
    • 📖 电子邮件
    • 📖 万维网 WWW
    • 📖 网络安全概述
    • 📖 密码学相关基本概念
    • 📖 对称密钥密码体制
    • 📖 公钥密码体制
    • 📖 报文摘要和报文鉴别码
    • 📖 数字签名(digital signature)
    • 📖 实体鉴别
    • 📖 密钥分发
    • 📖 访问控制
    • 📖 网络体系结构各层采取的安全措施—物理层和数据链路层
    • 📖 网络体系结构各层采取的安全措施—网络层
    • 📖 网络体系结构各层采取的安全措施—运输层
    • 📖 网络体系结构各层采取的安全措施—应用层
    • 📖 防火墙访问控制与入侵检测系统
    • 📖 常见的网络攻击及其防范
    • 📖 定长子网划分和变长子网划分的二叉树解法

课程笔记:访问控制与权限访问漏洞

课程名称:计算机网络应用 核心摘要:本讲围绕 Web 应用中的访问控制展开,系统讲解权限的本质(能力)、基于 URL 与基于数据两类访问控制的区别,重点剖析**垂直越权(功能权限)与水平越权(数据权限)**两大类漏洞的成因、表设计原理(RBAC 五表模型)以及防护方案,强调最小权限原则与业务+安全综合设计的思想。

一、 核心概念与原理

1.1 权限的本质

  • 权限 = 能力:用户登录系统后能做什么、能访问哪些数据、能进入哪些菜单。
  • 权限系统设计是安全设计的核心问题;权限控制不到位,系统将面临基础且灾难性的攻击。
  • 任何系统(传统单体项目、微服务项目)都必须有自己的权限系统设计,但实际开发中多以二次开发或采购现成权限管理系统为主,业务团队通常只针对业务模块开发。

1.2 访问控制的两个方向

Web 应用中的访问控制通常针对两个方向,二者需大颗粒度与细粒度相结合:

控制方向别名颗粒度控制对象实现难度
基于 URL 的访问控制基于菜单的访问控制 / 垂直权限 / 功能权限大颗粒度哪些菜单/URL 可访问简单,过滤器或安全框架即可完成
基于数据的访问控制数据权限 / 水平权限细粒度可访问哪些具体数据行/列较难,依赖业务细节,无统一框架

1.3 越权访问漏洞分类

  • 垂直越权(Vertical Privilege Escalation):又称功能权限漏洞,对应基于 URL 访问控制失效,普通用户获取管理员功能权限。
  • 水平越权(Horizontal Privilege Escalation):又称数据权限漏洞,对应基于数据访问控制失效,同角色用户互相操作对方私有数据。
  • 未授权访问:未登录即访问应受保护资源。

二、 技术细节与协议分析

2.1 基于 URL 访问控制的表设计(RBAC 五表模型)

设计一套完整的权限管理系统,需要以下五张表:

序号表名作用关键字段
1用户表存储系统用户信息user_id、user_name
2角色表定义不同角色role_id、role_name
3资源表(菜单表/URL表)定义可访问的 URL/菜单resource_id、url、menu_name
4用户-角色关系表维护用户与角色的多对多关系user_id、role_id
5角色-资源关系表维护角色与资源的多对多关系role_id、resource_id

关系链路:用户表 → 用户-角色关系表 → 角色表 → 角色-资源关系表 → 资源表,最终定位某用户可访问哪些 URL。

特殊场景示例:张三同时是 IT 部门安全管理员与开发一部的开发工程师,需通过"用户-角色关系表"维护一个用户对应多个角色的关系。

2.2 RBAC(基于角色的访问控制)

  • 全称:Role-Based Access Control,简称 RBAC。
  • 核心思想:虽有大量用户,但真正决定用户能访问什么资源的是其角色,而非用户本身。
  • 最终表现形式:某用户可以访问哪些 URL。
  • 角色 = 权限的集合:一个角色对应一组可访问的资源(URL/菜单)。
  • 不同角色锁定不同权限,例如论坛中的 admin / 普通用户 / 匿名用户;传统项目中的管理员、财务人员、Boss 等。
角色典型权限
admin功能节点管理、日志管理、用户管理、角色管理
普通用户浏览、评论,仅能删除自己的内容
匿名用户仅浏览
财务人员支出、薪资、报税
Boss数据汇总性查看
  • 主流框架:早期多用 Shiro;企业(含 Spring 生态)目前多用 Spring Security,其底层即基于 RBAC 模型处理权限管理与鉴权问题。

2.3 垂直越权漏洞分析

维度说明
漏洞名称垂直越权 / 功能权限漏洞 / 基于 URL 访问控制失效
成因服务端(过滤器)未校验"角色-URL"匹配关系,也未使用安全框架做权限管理与鉴权;仅在前端隐藏部分功能菜单
攻击方式攻击者略懂开发命名规范,猜测管理员 URL(如 /admin/user/list、/admin/role/manage),直接访问即获得管理员权限
危害普通用户获得管理员权限,达成权限提升(越权)目的
防护方案对任何业务相关 URL,每次访问时都判定该用户是否拥有此 URL 访问权限;推荐使用 Spring Security 等安全框架,否则至少在访问任何 URL 前加入鉴权过滤器

2.4 水平越权漏洞分析

维度说明
漏洞名称水平越权 / 数据权限漏洞 / IDOR(不安全的直接对象引用)/ 基于数据访问控制失效
成因Web 应用接收用户访问/修改某条数据时,未判断当前用户是否可以操作该条记录(数据权限控制不足)
业务场景同部门张三、李四均有"线索管理"访问权限(垂直权限已控制),但张三只能操作张三的线索、李四只能操作李四的线索(需数据权限控制)
攻击方式张三通过篡改请求参数(如记录 id),删除/查看/修改李四的线索信息
危害同角色用户互相越权操作私有数据,违背业务需求
防护方案根据用户 id 做好数据级别权限控制;增删改查时先做会话验证,校验该数据是否属于当前用户 id;具体问题具体分析,无统一框架可一次性完美解决

2.5 数据权限的细化分类

数据权限(水平权限)可进一步细分为行权限与列权限:

类型控制对象说明典型场景
行权限数据行不同用户可访问不同的数据行;张三只能访问张三的行,管理员可访问所有行内部业务系统(如 CRM 线索管理)
列权限数据列限制可访问的字段;摘要列人人可查,详情列仅 VIP 可看面向大众用户的外部 App / 内容平台

三、 实践应用与配置命令

3.1 基于 URL 访问控制的过滤器实现思路

// 过滤器核心校验逻辑(伪代码)
// 1. 用户登录成功后,用户信息存入 Session
// 2. 访问任何 URL 前,过滤器拦截并校验
User user = (User) session.getAttribute("user");        // 从 Session 获取用户
String targetUrl = request.getRequestURI();             // 获取目标 URL
// 3. 通过 用户表 -> 用户-角色关系表 -> 角色表 -> 角色-资源关系表 -> 资源表
//    校验该用户对应的角色是否拥有访问 targetUrl 的权限
boolean hasPermission = authService.checkPermission(user.getId(), targetUrl);
if (hasPermission) {
    chain.doFilter(request, response);                  // 放行
} else {
    response.sendError(403, "未授权");                  // 返回未授权
}

3.2 水平越权防护的数据级校验思路

// 增删改查前的数据归属校验(伪代码)
Long currentUserId = (Long) session.getAttribute("userId");
Clue clue = clueService.getById(clueId);                // 查询待操作数据
// 校验当前数据是否属于当前用户(行权限控制)
if (!clue.getOwnerId().equals(currentUserId)) {
    throw new UnauthorizedException("越权访问:无权操作他人数据");
}
// 校验通过后执行 增/删/改 操作
clueService.delete(clueId);

说明:数据权限控制无统一框架,需结合业务场景在业务代码中显式校验数据归属。

3.3 漏洞披露平台参考

  • 乌云(WooYun):漏洞披露平台,收录各大厂/机构的漏洞案例(如中国金融认证中心某系统未授权访问、涉及内网等),含厂商、作者、提交/修复/公开时间及漏洞描述,便于了解常见漏洞并指导防护。作为合格开发人员,应具备安全意识,关注此类平台。

四、 重点与难点提示

4.1 考点 / 易错点

  • 权限的本质是"能力",访问控制 = 权限控制,归属于访问系统 URL/数据接口的资源访问问题。
  • 垂直权限 vs 水平权限 是高频考点,务必区分:
    • 垂直权限 = 功能权限 = 基于 URL 访问控制(大颗粒度)。
    • 水平权限 = 数据权限 = 基于数据访问控制(细粒度)。
  • RBAC 五表模型(用户表、角色表、资源表、用户-角色关系表、角色-资源关系表)是权限系统设计的基础,需能画出关系图并说明数据流向。
  • 行权限 vs 列权限:行权限控制"能看哪些行",列权限控制"能看哪些列"(外部 App 常见,如摘要免费、详情 VIP)。
  • IDOR(不安全的直接对象引用) 属于水平越权的典型表现,面试常考。
  • 水平越权无统一框架可解,需结合业务做数据级校验;垂直越权可通过 Spring Security / Shiro / 过滤器解决。

4.2 易错点提示

  • 仅在前端隐藏菜单 ≠ 权限控制,服务端必须校验。
  • 使用安全框架(如 Spring Security)默认只解决垂直权限(URL/功能级),不解决水平权限(数据级)。
  • 越权场景与业务需求交织(如张三可查看李四信息但不能修改),需安全 + 业务综合判断,不可一刀切。
  • 命名规范虽提升可读性,但也会让攻击者更易猜测管理 URL,不能依赖命名混淆作为安全手段。

4.3 面试高频题

  1. 什么是垂直越权与水平越权?举例说明二者区别。
  2. 简述 RBAC 模型及其五张表设计。
  3. 什么是 IDOR?如何防护?
  4. 行权限与列权限的区别及应用场景?
  5. 为什么水平越权难以用统一框架解决?
  6. 简述最小权限原则及其在权限设计中的应用。

五、 课后疑问/遗留问题

  1. Spring Security 的具体配置与 RBAC 落地实现细节(本讲仅提及框架名,未展开实战配置)。
  2. 当一个用户拥有多个角色时,权限是取并集还是做冲突仲裁?实际项目中如何处理角色间的权限重叠与互斥?
  3. 列权限在数据库层与应用层分别如何落地实现?是否有成熟方案?
  4. 水平越权的通用化解决方案探索:是否存在基于数据权限中间件 / MyBatis 拦截器 / 数据权限注解的半通用方案?
  5. 课后建议:访问乌云等漏洞披露平台,查阅真实未授权访问 / 越权访问案例,分析其成因与修复方式。
最近更新: 2026/6/23 17:18
Contributors: yangwenguang
Prev
课程笔记:文件上传漏洞与文件下载/目录浏览漏洞
Next
课程笔记:DDoS 分布式拒绝服务攻击原理与防护