当前位置: 首页 > news >正文

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.lqws.cn/news/519193.html

相关文章:

  • LangGraph开篇-LangGraph 核心元素简介(官网文档解读)
  • Spring Web MVC ①
  • 用 Boost 库解析 .ini 和 .json 文件时的“坑”:注释导致的解析错误与解决方案
  • 湖北理元理律师事务所:债务规划中的法律与心理双轨模型
  • 如何在 Manjaro Linux 上安装 Docker 容器
  • OpenCV——cv::floodFill
  • 卷积神经网络(Convolutional Neural Network, CNN)
  • 使用pyflink编写demo并将任务提交到yarn集群
  • 大塘至浦北高速:解锁分布式光伏“交能融合”密码,引领绿色交通革命
  • Redis HyperLogLog误差率0.81%的由来:从算法原理到Redis实现
  • UNIAPP入门基础
  • 如何快速将iPhone中的文本保存到电脑上
  • [架构之美]在Linux上通过源码编译安装Nginx(十四)
  • golang实现一个mysql中随机获取cookies的API
  • 数字隔离器,如何扛起现代智能家电的电气安全“大旗”
  • [Java实战]Windows系统JDK21安装与JDK8切换指南(三十九)
  • 利用亮数据实现海外网站数据自动抓取
  • 回归预测 | Matlab实现KAN神经网络多输入单输出回归预测模型
  • 【CUDA调优指南】缓存访存流程
  • 商务年度总结汇报PPT模版分享
  • 板凳-------Mysql cookbook学习 (十--10)
  • 笔记02:布线-差分对的设置与添加
  • 定制开发开源AI智能名片与S2B2C商城小程序的内容分发体系构建:基于“1+N“素材复用模型的创新实践
  • 旧物回收小程序:让旧物重获新生的魔法钥匙
  • 14.Linux Docker
  • Mac安装Apache CXF的时候报错:/Library/Internet: No such file or directory
  • 淘宝API安全合规指南:避免数据泄露与封禁
  • 智能质检对呼叫中心职场有什么作用
  • 深入剖析 Spring AOP
  • 迁移学习—基于猫狗数据集