橫向越權:修改參數訪問不屬于自己的數據

一、什么是橫向越權

定義
橫向越權(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…