php后臺增加權限控制

  • 背景
    最近在對接某大廠,部署差不多了,但是在漏洞掃描環節有問題,前端是用vue代碼寫的。后端是php。發現前端路由可以攔截未登錄的url。但是后端php接口不用登錄就能訪問,很危險

  • 解決方法

一、創建 Auth 中間件
首先創建一個專門用于驗證 Session 的中間件: 里面可以放開不用登錄的接口

<?php
// 目錄位置 app/middleware/Auth.php
namespace app\middleware;use think\facade\Session;
use think\Response;class Auth
{// 定義不需要驗證的接口路徑protected $exceptPaths = ['Auth/login',       // 登錄接口'Auth/logout',    // 注冊接口'Auth/getCode',    // 注冊接口'Index/getTitle',    // 注冊接口// 可添加更多無需驗證的接口...];public function handle($request, \Closure $next){// 獲取當前請求的路徑(不含域名和參數)$path = $request->pathinfo();// 檢查是否為排除的路徑if ($this->shouldPassThrough($path)) {return $next($request); // 跳過驗證,直接繼續}// 檢查Session中是否有登錄用戶信息if (!Session::has(SESSION_LOGIN_KEY)) {// 未登錄,返回JSON錯誤響應return json(['code' => 0,'msg' => '請先登錄','data' => 401,'url' => null,'wait' => 3]);}// 已登錄,將用戶信息注入請求對象,方便后續使用$request->user = Session::get(SESSION_LOGIN_KEY);// 繼續執行后續請求處理return $next($request);}// 判斷請求是否應跳過驗證protected function shouldPassThrough($path){foreach ($this->exceptPaths as $except) {if (strpos($path, $except) === 0) {return true;}}return false;}
}

二、注冊中間件
有兩種方式注冊中間件,根據你的需求選擇:

  1. 全局中間件(所有請求都驗證)
    打開 目錄位置app/middleware.php 文件,添加中間件:
// app/middleware.php
return [// 其他中間件...\app\middleware\Auth::class,
];
  1. 路由中間件(按需驗證)
    如果你只想驗證部分接口,在路由定義中使用中間件:
// app/route/route.php
use think\facade\Route;// 應用Auth中間件到整個Video控制器組
Route::group('video', function () {Route::get('getIqiyiLists', 'Video/getIqiyiLists');Route::get('getSohuLists', 'Video/getSohuLists');// 其他接口...
})->middleware(\app\middleware\Auth::class);// 或者只應用到特定接口
Route::get('video/getIqiyiLists', 'Video/getIqiyiLists')->middleware(\app\middleware\Auth::class);
  • 總結
    大概就是這樣玩的。ThinkPHP 的中間件機制還是挺不錯。后續你還可以加入權限的控制之類的。如果發現博文有問題,歡迎老鳥指點一二

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88424.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88424.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88424.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨平臺后端編程ASP.NET CORE Razor新一代Web開發框架C#

asp.net core Razor動態語言編程代替asp.net .aspx更高級嗎&#xff1f; https://blog.csdn.net/xiaoyao961/article/details/148846065 C#Blazor應用-跨平臺WEB開發VB.NET-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148846437 Products.razor文件,Blazor和…

Storm-Pulse 全國強對流預報接口深度解析:從技術原理到防災應用(附API接入示例)

2025年6月14日安徽省氣象臺發布的強對流黃色預警中&#xff0c;合肥、阜陽等地出現了小時雨量 30-50 毫米的短時強降水和8-10級雷暴大風&#xff0c;局地甚至觀測到云閃現象。強對流天氣是指由強烈上升氣流引發的突發性、高破壞力天氣現象&#xff0c;涵蓋了短時強降水、雷暴大…

2024中國科學技術大學計算機保研上機真題

中國科學技術大學計算機保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/problem 運動會比賽日程安排 題目描述 某運動會設立 M M M 個比賽項目&#xff0c;每個運動員&#xff08;共 N N N 個運動員&#xff09;可以參加多個項目&#xff0c;每個項目的比賽時長…

(LeetCode 面試經典 150 題) 122. 買賣股票的最佳時機 II (貪心)

題目&#xff1a;122. 買賣股票的最佳時機 II 思路&#xff1a;貪心&#xff0c;時間復雜度0(n)。 當天比前一天值大&#xff0c;就進行賣出的交易。購入是默認前一天已購入。 C版本&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int…

一篇文章了解XML

一、什么是 XML&#xff1f; XML 是一種結構化數據的標記語言&#xff0c;用來存儲、傳輸和描述數據。 它和 HTML 很像&#xff0c;但它的標簽是自定義的&#xff0c;不限定格式和外觀&#xff0c;而是強調數據的結構和含義。 XML不是用來展示數據的&#xff0c;HTML是用來展…

react經驗:i18n配置換行的富文本

應用場景 調用"useTranslations().rich"輸出換行的文本。 實施步驟 1.翻譯文件 例如:zh.json {"home":"第一行<br></br>第二行<font>加粗文本</font>" }2.調用rich處理標簽 t.rich(home, { br: () > <br /&g…

Wpf中控件作為Binding的源

1、Xaml代碼 Slider 滑動控件&#xff0c;設置了最小值0和最大值100&#xff0c;TextBox作為Binding的目標對象&#xff0c;它的Text屬性作為Binding目標的屬性&#xff0c;Binding的源的Source就是slider_test這個Slider滑動控件&#xff0c;Binding的源的Path就是slider_test…

【機器學習深度學習】典型的模型訓練過程

目錄 一、模型訓練直觀圖 二、核心目標 三、訓練過程詳解 3.1 訓練階段 1、準備起點&#xff1a;輸入數據 初始參數權重 2、模型嘗試預測&#xff1a;變換計算 (前向傳播) 3、檢查錯誤&#xff1a;計算損失值 4、學習的關鍵&#xff1a;反向傳播 梯度下降法 (調整權…

Mysql8.0版本未卸載干凈如何重新下載

Mysql8.0版本未卸載干凈如何重新下載 安裝前準備 清理現有安裝&#xff08;確保干凈環境&#xff09; :: 停止并卸載現有MySQL服務 net stop MySQL >nul 2>&1 sc delete MySQL >nul 2>&1:: 刪除舊數據目錄 rd /s /q "C:\ProgramData\MySQL" &…

垃圾收集器G1ZGC詳解

G1收集器(-XX:UseG1GC) G1 把堆劃分為許多大小相同的 Region&#xff08;默認 1~32 MB&#xff0c;一個堆通常包含上千個 Region&#xff0c;JVM目標是不超過2048個Region(JVM源碼里TARGET_REGION_NUMBER 定義)&#xff09; 不再是傳統的 Eden、Survivor、Old 靜態分代模型&…

Bootstrap 5學習教程,從入門到精通,Bootstrap 5 彈出框(Popovers) 語法知識點及案例(22)

Bootstrap 5 彈出框(Popovers) 語法知識點及案例 一、彈出框基本概念 彈出框(Popovers)是Bootstrap提供的一個小型覆蓋層組件&#xff0c;用于顯示額外的信息&#xff0c;當用戶點擊某個元素時出現&#xff0c;再次點擊時消失。 二、彈出框基本語法知識點 1. 必需屬性 dat…

輕巧靈動,智啟未來 ——Kinova Gen3 Lite 機器人輕松解鎖各行業自動化新姿勢

近年來&#xff0c;Kinova Gen3 Lite 機器人憑借其卓越的性能、靈活的應用能力以及出色的性價比&#xff0c;在全球范圍內掀起了一股熱銷狂潮。無論是科研機構、高校實驗室&#xff0c;還是工業制造企業&#xff0c;都對它青睞有加。其銷量持續攀升&#xff0c;市場占有率不斷擴…

STM32 實現PID

&#x1f9f1; 一、PID核心模塊&#xff08;模塊化設計&#xff09; 頭文件 pid_controller.h #pragma once #include <stdint.h>typedef struct {// 可調參數float Kp, Ki, Kd; // PID系數float output_min; // 輸出下限float output_max; // 輸出上…

基于MATLAB的BP神經網絡回歸模型在空氣質量預測中的應用

說明&#xff1a;這是一個機器學習實戰項目&#xff08;附帶數據代碼文檔&#xff09;&#xff0c;如需數據代碼文檔可以直接到文章最后關注獲取。 1.項目背景 隨著城市化進程的加快和工業化的不斷發展&#xff0c;空氣質量問題日益受到廣泛關注。空氣中污染物如PM2.5、PM10、…

Linux docker拉取鏡像報錯解決

1、錯誤提示&#xff1a; Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection 主要原因就是docker源不正確&#xff0c;需要配置一下。 2、報錯如下&#xff1a; 3、解決辦法&#x…

stm32week17+18+19+20

stm32學習 十二.串口 5.USART的HAL庫用法 USART/UART異步通信配置步驟&#xff1a; 配置串口工作參數&#xff1a;HAL_UART_Init();串口底層初始化&#xff1a;HAL_UART_MspInit();開啟串口異步接收中斷&#xff1a;HAL_UART_Receive_IT();設置優先級&#xff0c;使能中斷&…

14.Linux Docker

## Linux系統優化一般情況&#xff0c;我們都會使用Linux來進行MySQL的安裝和部署&#xff0c;Linux系統在使用的時候&#xff0c;也需要進行相關的配置&#xff0c;以提高MySQL的使用性能&#xff0c;這里列舉以下幾點&#xff1a;避免使用Swap交換分區&#xff0c;因為交換時…

智能體平臺的商業前景與競爭格局分析:金融與企業市場的機遇與挑戰

一、金融機構與企業部署第三方智能體平臺&#xff0c;這條路靠譜嗎&#xff1f; 1. 需求背景 金融機構和大中小企業普遍面臨數字化轉型、降本增效、智能服務升級等需求。智能體&#xff08;Agent/AI Agent&#xff09;平臺能幫助企業快速構建客服、風控、營銷、數據分析等多種…

數據結構篇-二分圖

定義示例應用 定義 一個圖是二分圖&#xff1b;一個圖具有二著色性&#xff1b;一個圖不包含任何奇數長度的環&#xff1b; 實現 /*** Program 18.6 Two-colorability* ------------------------------------------------------------------------------------------------…

50. Pow(x, n)快速冪算法

實現 pow(x, n) &#xff0c;即計算 x 的整數 n 次冪函數&#xff08;即&#xff0c;xn &#xff09;。此函數應將 x 作為浮點數&#xff08;意味著它可以是十進制數&#xff09;和 n 作為整數&#xff08;可以是正數、負數或零&#xff09;一起使用。 快速冪&#xff08;Expo…