一、什么是横向越权

定义
横向越权(Horizontal Privilege Escalation)是指 同一权限级别的用户,通过篡改请求参数或资源标识,访问本不属于自己的数据或功能。

例子
假设一个在线商城,用户 A 访问订单详情的 URL:

GET /order/detail?orderId=1001

如果用户 B 把 orderId 改成 1001 也能访问到 A 的订单,这就是 横向越权漏洞

与纵向越权的区别

  • 横向越权:同级别用户之间的权限越界(普通用户访问到其他普通用户的数据)。

  • 纵向越权:低级别用户访问到高级别功能(普通用户访问到管理员功能)。


二、Spring Boot 项目中横向越权的常见场景

  1. 参数直接控制资源 ID

    • 例如:/api/user/info?id=123

      如果系统只根据 id 查询数据库,而不验证当前用户是否有权限访问该 ID,对方就能访问别人的信息。

  2. 仅靠前端控制访问

    • 比如前端菜单隐藏了“管理员功能”,但后端 API 并没有权限验证。

  3. 依赖会话中的用户 ID 不严谨

    • 有些开发会直接从请求参数中取 userId,而不是 session/JWT 中的用户身份。


三、Spring Boot 中防止横向越权的常用方案

1. 基于用户身份的后端校验(强制访问控制)

无论前端传什么参数,后端必须根据当前登录用户验证资源归属

示例:

@GetMapping("/order/detail")
public Order getOrderDetail(@RequestParam Long orderId, Principal principal) {String username = principal.getName(); // 当前登录用户Order order = orderService.findById(orderId);if (!order.getUsername().equals(username)) {throw new AccessDeniedException("无权访问该订单");}return order;
}

优点:简单直接,杜绝参数篡改。
注意:不要直接信任前端传的 userId


2. 使用 Spring Security + 方法级权限控制

利用 @PreAuthorize / @PostAuthorize 注解做 权限 + 数据校验

@PreAuthorize("@securityService.canAccessOrder(principal.username, #orderId)")
@GetMapping("/order/detail")
public Order getOrderDetail(@RequestParam Long orderId) {return orderService.findById(orderId);
}

SecurityService

@Service
public class SecurityService {public boolean canAccessOrder(String username, Long orderId) {Order order = orderMapper.findById(orderId);return order != null && order.getUsername().equals(username);}
}

优点:和权限体系无缝结合,复用性高。
注意:权限校验逻辑要集中管理,避免散落到各处。


3. 数据层过滤(Query 加用户条件)

在 DAO 层/Repository 层,直接加上当前用户的条件,避免查到别人的数据。

@Select("SELECT * FROM orders WHERE id = #{orderId} AND username = #{username}")
Order findByIdAndUsername(@Param("orderId") Long orderId, @Param("username") String username);

优点:数据源头控制。
注意:如果有批量查询,需要特别注意条件一致性。


4. 资源标识加密/混淆

  • 代替暴露自增 ID,例如使用 UUID、雪花 ID、HashID 等。

  • 即使 ID 被猜测,也不能轻易访问到资源。

String encryptedId = encrypt(orderId); // 例如AES加密

优点:增加枚举成本,降低暴力破解风险。
注意:不是核心防御手段,必须配合权限校验。


5. 审计 & 监控

  • 对敏感数据的访问做日志记录。

  • 配合异常访问频率报警(防止批量爆破 ID)。


四、防御策略总结

方法层级适用场景缺点
后端资源归属校验控制器层所有敏感接口需要每个接口写逻辑
Spring Security 方法权限服务层业务方法学习曲线高
数据层过滤DAO层查询数据接口复杂查询不易统一处理
ID 加密/混淆前后端避免 ID 猜测不是单独防御手段
审计与监控全局事后追踪无法预防攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92811.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92811.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92811.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

攻击实验(ARP欺骗、MAC洪范、TCP SYN Flood攻击、DNS欺骗、DHCP饿死)

实验一 ARP欺骗一、拓扑二、实验准备、1.设置终端漏洞靶机集合选择需要的数量和镜像打开设备上的驱动精灵安装网卡安装成功后查看IP地址、网关信息等。三、实验步骤1.实验原理中间人(攻击者)在终端与网关之间持续发送伪造的 ARP 应答包,双向欺…

VSCode 禁用更新检查的方法

通过设置菜单禁用 这是最直接和推荐的方法,可以永久禁用自动更新: 打开 VSCode。点击左下角的齿轮图标,然后选择“设置”。或者通过菜单栏“文件” > “首选项” > “设置”进入。在顶部的搜索框中输入“update”。找到“Update: Mode”…

Flutter - 应用启动/路由管理

一、应用入口1. 初始化 Flutter 底层绑定 ,运行 App。import package:flutter/material.dart; import package:flutter_base/Application.dart;void main() {// 确保绑定初始化WidgetsFlutterBinding.ensureInitialized();// App初始化Application.init(); }2. 注册…

MySQL 数据操作全流程:创建、读取、更新与删除实战

MySQL系列 文章目录MySQL系列前言一、Create(创建)并插入数据1.1 单行数据 全列插入1.2 多行数据 指定列插入1.3 插入冲突时同步更新1.4 冲突时替换二、Retireve读取数据2.1 全列查询2.2 查询指定列2.3 查询字段为表达式2.4 结果去重 DISTINCT2.5 where条件筛选2.6 order by语…

SQL约束:数据完整性的守护者

在SQL中,约束(Constraints) 是作用于数据库表字段上的规则,用于强制保证数据的完整性、准确性和一致性。当插入、更新或删除数据时,约束会自动验证操作是否符合规则,若违反则拒绝执行。 以下是SQL中常见的约…

Springboot-vue 地图展现

在很多社区管理系统中,地图展示功能是一个重要的模块,它能直观地呈现小区的地理位置分布。本文将详细梳理从前端触发请求到地图上展示小区数据的完整流程,帮助大家理解前后端协同工作的具体细节。一、前端触发:页面加载与地图初始…

Vue 3 登录组件

Login.vue 组件详细分析整体架构 Vue 3 登录组件&#xff0c;采用 Composition API Element Plus UI 库&#xff0c;实现了完整的用户认证界面。 模板结构分析 1. 容器布局 <div class"login-container"><el-card class"login-card"><!-- …

小结: getSpringFactoriesInstances从 `spring.factories` 文件中加载和实例化指定类型的类

getSpringFactoriesInstances 方法工作原理 getSpringFactoriesInstances 是 Spring Boot 框架中的一个核心方法&#xff0c;用于从 spring.factories 文件中加载和实例化指定类型的类。这是 Spring Boot 实现自动配置和插件化扩展的关键机制。 1. 基本功能 该方法的主要作用是…

selenium SessionNotCreatedException问题解决办法

在上周有一台服务器重启之后&#xff0c;Chrome浏览器也自动升了级&#xff0c;原本能够正常使用的自动化办公程序突然没法用了&#xff0c;出现了下面的报错提示。codes/addCancelBdld.py:980: DeprecationWarning: use options instead of chrome_optionsdriver webdriver.C…

SOAP HTTP Binding

SOAP HTTP Binding 引言 SOAP(Simple Object Access Protocol)是一种轻量级、简单的协议,用于在网络上交换结构化信息。它广泛应用于Web服务中,用于实现不同系统和应用程序之间的通信。SOAP HTTP Binding是SOAP协议的一种实现方式,它允许使用HTTP协议来传输SOAP消息。本…

GPT-5免费使用教程(国内可访问)

GPT-5来了&#xff0c;压力给到各大AI模型厂商&#xff1f; 北京时间2025年8月7日&#xff0c;OpenAI 推出两款开源模型 gpt-oss-120b / 20b&#xff0c;性能逼近 o4-mini/o3-mini&#xff0c;一时间火爆AI圈&#xff1b;但这好像只是一道开胃小菜&#xff0c;在北京时间2025年…

内存作假常见方案可行性分析

内存作假通常修改所涉及到的几个文件&#xff1a;M sys/frameworks/base/core/java/android/app/ActivityManager.javaM sys/frameworks/base/core/jni/android_os_Debug.cppM sys/frameworks/base/core/jni/android_util_Process.cppM sys/frameworks/base/services/core/java…

C#(vs2015)利用unity实现弯管机仿真

以下是基于 Visual Studio 2015 和 Unity 实现弯管机仿真的完整技术流程&#xff0c;结合工业仿真开发的最佳实践整理而成&#xff0c;涵盖建模、通信、运动控制和交互逻辑等核心模块&#xff1a;---一、环境配置与基础框架搭建 1. Unity 与 VS2015 联动 - 安装 [Visual Studio…

华为USG防火墙双机,但ISP只给了1个IP, 怎么办?

华为USG防火墙双机&#xff0c;但ISP只给了1个IP&#xff0c; 怎么办&#xff1f; 华为USG双机使用VRRP&#xff0c;需要3个Ip 本次联通只给了 100.1.1.0/30 这一个互联段 联通侧用了100.1.1.1&#xff0c; 我们这一侧只有100.1.1.2 怎么办&#xff1f; 找联通多要几个Ip&…

Go 工具链环境变量实战:从“command not found”到工具全局可用的全流程复盘

在 Go 生态里&#xff0c;丰富的命令行工具极大提升了开发效率。但很多小伙伴第一次用 go install 安装第三方工具后&#xff0c;却遇到终端里找不到命令的尴尬——明明装好了&#xff0c;终端却报 “command not found”。这是为什么呢&#xff1f;本文结合我亲身踩过的坑&…

MCU 软件断点注意事项!!!

——为什么调试器会在运行中改我的Flash程序&#xff1f;调试单片机时&#xff0c;很多人都有这样的疑问&#xff1a;明明我在调试前刷进去的固件是好的&#xff0c;为什么加了一个断点之后&#xff0c;调试器居然去改了 Flash&#xff1f; 如果我拔掉调试器&#xff0c;这个固…

腾讯iOA:数据安全的港湾

声明&#xff1a;文章为本人真实测评&#xff0c;非广告&#xff0c;无推广&#xff0c;为用户体验文章 前言 当前网络安全威胁日益复杂化&#xff0c;恶意软件攻击手段不断升级。例如&#xff1a;钓鱼邮件携带的伪装安装包可能引发勒索病毒在内网扩散&#xff0c;导致业务中断…

相册管理系统介绍

之前在github和gitee上了找了好久也没找到符合自己需求的相册管理系统&#xff0c;最近就静下心来自己写了一套。系统分为前台相册系统与后台管理系统。 技术框架采用的是前端vueelementui&#xff0c;后端springbootmybatisplus。 下面是项目截图&#xff1a;项目功能介绍&…

企业级高性能WEB服务器Nginx

nginx安装 1.nginx编译安装 #在nginx官网获取安装包 [rootwebserver mnt]# wget https://nginx.org/download/nginx-1.24.0.tar.gz#解压安装包 [rootwebserver mnt]# tar zxf nginx-1.24.0.tar.gz [rootwebserver mnt]# cd nginx-1.24.0/#安装编译nginx需要的环境软件 [rootw…

【Node.js从 0 到 1:入门实战与项目驱动】1.3 Node.js 的应用场景(附案例与代码实现)

文章目录1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;1.3 Node.js 的应用场景&#xff08;附案例与代码实现&#xff09;一、Web 服务器开发二、API 开发三、命令行工具&#xff08;CLI&#xff09;开发四、实时应用开发小结1.3 Node.js 的应用场景&#x…