• 在使用openbms的时候发现的Thinkphp action 大小写问题


    下载了 https://gitee.com/openbms/openbms 看了看源代码,调试了一下普通用户的demo 用户 发现无法上传图片,admin不会,查看了源代码 发现是这样的

    admin用户因为是管理员直接跳过权限检查了 代码在 application/common/controller/AdminBase.php

     普通用户到 

    !in_array($this->request->action(), $this->noAuth)

    检查失败 然后看了一下请求 

    /admin/index/uploadImage

    请求地址和内容没问题 调试了一下代码 发现 当前action 和noAuth分别为

    string(11) "uploadimage"
    array(6) {
      [0]=>
      string(5) "index"
      [1]=>
      string(11) "uploadImage"
      [2]=>
      string(10) "uploadFile"
      [3]=>
      string(11) "uploadVideo"
      [4]=>
      string(8) "iconLibs"
      [5]=>
      string(6) "logout"
    }

    发现问题所在  request 得到的 action 被转了小写,没有驼峰法了,然后发现有人也遇到类似的问题  https://blog.csdn.net/weixin_30797199/article/details/96202967

     然后就只要改一下这里就行了

     其他几个上传 file 上传 video的同理。

    不过这里的问题是TP核心对action 的处理的问题 我觉得可以把这里的action 请求都强制转小写 然后在判断,可以兼容两个版本。例如

     patch 如下

    diff --git a/application/admin/controller/Index.php b/application/admin/controller/Index.php
    index 3c2baac..cbb6f39 100644
    --- a/application/admin/controller/Index.php
    +++ b/application/admin/controller/Index.php
    @@ -12,10 +12,10 @@ class Index extends AdminBase
         ];
         protected $noAuth = [
             'index',
    -        'uploadImage',
    -        'uploadFile',
    -        'uploadVideo',
    -        'iconLibs',
    +        'uploadimage',
    +        'uploadfile',
    +        'uploadvideo',
    +        'iconlibs',
             'logout'
         ];
    
    
    diff --git a/application/common/controller/AdminBase.php b/application/common/controller/AdminBase.php
    index 941adb6..ad3fc5e 100644
    --- a/application/common/controller/AdminBase.php
    +++ b/application/common/controller/AdminBase.php
    @@ -33,8 +33,8 @@ class AdminBase extends Base
         public function checkAuth()
         {
             if (session('admin_auth.username') != config('administrator') &&
    -            !in_array($this->request->action(), $this->noLogin) &&
    -            !in_array($this->request->action(), $this->noAuth) &&
    +            !in_array(strtolower($this->request->action()), $this->noLogin) &&
    +            !in_array(strtolower($this->request->action()), $this->noAuth) &&
                 !(new coreAuth())->check($this->request->module() . '/'
                     . to_under_score($this->request->controller()) . '/'
                     . $this->request->action(), session('admin_auth.admin_id'))) {

    这里改好了就能上传了

  • 相关阅读:
    C++ *this与this的区别(系个人转载,个人再添加相关内容)
    C++ 友元(系转载多人博客,添加个人见解)
    C++模板详解(系转载,但是个人添加了一些内容)
    实验三:klee的执行重现机制(示例分析)
    klee错误汇报二:KLEE的optimize选项的一个困惑
    KLEE错误汇报一:One phenomenon after the execution using klee
    实验一:使用符号执行工具klee对软件进行破解(来自于klee官网)
    个人发现的createProcess调用漏洞
    docker运行时设置redis密码并替换redis默认的dump.rdb
    saltstack入门个人笔记
  • 原文地址:https://www.cnblogs.com/lizhaoyao/p/14639055.html
Copyright © 2020-2023  润新知