当前位置: 首页 > 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 的中间件机制还是挺不错。后续你还可以加入权限的控制之类的。如果发现博文有问题,欢迎老鸟指点一二

相关文章:

  • 服务号不认证可做微网站吗微信推广怎么做
  • 美女做暖暖免费视频2017网站seo工作室
  • 网站建设怎么说服客户下载百度卫星导航
  • 企业官方网站的作用国内十大4a广告公司
  • 三只松鼠网站谁做的软文代发价格
  • b2b网站建设公司b站新人视频怎么推广
  • Odoo API 集成:XML-RPC 与 JSON-RPC 的比较
  • RabbitMq中启用NIO
  • 操作系统学习笔记 | 第一章 计算机系统概述
  • “ICU”归来的小鹏,如何抗衡小米YU7?
  • EJB知识
  • NCCN Guidelines Navigator:数智化工具引领肿瘤精准治疗新纪元
  • linux安装docker
  • 国内优秀wordpress主题推荐
  • 量学云讲堂2025朱永海慢牛开启第58期视频课程
  • 设计模式 | 工厂模式
  • 大模型推理-高通qnn基础
  • SpringMVC系列(三)(请求处理的十个实验(上))
  • MySQL常用函数性能优化及索引影响分析
  • PAC 学习框架:机器学习的可靠性工程
  • AI Agent模型:Plan-and-Execute、ReAct、Function Calling
  • leetcode-2138.将字符串划分为若干个长度为k的组
  • 数据库系统总结
  • 鸿蒙工具类---设置全屏效果(上下安全区背景可设置)
  • 常用的串口通信工具MobaXterm、Bus Hound、SScom等
  • GNSS位移监测站的应用场景