TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复

2023-06-01 00:00:00 框架 修复 安全漏洞

因为是个人博客网站,很久以前学习tp5的时候写的,第一没时间,第二也是有情怀在里面,

所以就没有换laravel,也懒的升级,有些无聊的人就来瞎搞 "wcnmlgba" 


因为有点流量,所以我也不得不花点时间打理一下,说一下本站技术栈更换计划。


本站计划

预计本站明年初,要跟换成laravel9 或者 hyperf3.0

到时候看情况


说一下昨天本站安全补丁修复步骤

tp5.0.10


文件夹权重调整 调整用户用户组及权限

public
runtime

查看版本

\thinkphp\base.php 文件

define('THINK_VERSION', '5.0.10');


1.补丁修复1

\thinkphp\library\think\App.php 文件 大概在328行


    /**
     * 执行模块
     * @access public
     * @param array $result 模块/控制器/操作
     * @param array $config 配置参数
     * @param bool  $convert 是否自动转换控制器和操作名
     * @return mixed
     */
    public static function module($result, $config, $convert = null)
    {
           ....省略....
           
        // 获取控制器名
        $controller = strip_tags($result[1] ?: $config['default_controller']);
        //20211201 s
        if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
            throw new HttpException(404, 'controller not exists:' . $controller);
        }
        //20211201 end
        $controller = $convert ? strtolower($controller) : $controller;
       
           ....省略....
    }

2.补丁修复2


\thinkphp\library\think\Request.php 文件 大概在496行

    /**
     * 当前的请求类型
     * @access public
     * @param bool $method  true 获取原始请求类型
     * @return string
     */
    public function method($method = false)
    {
        if (true === $method) {
            // 获取原始请求类型
            return IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
        } elseif (!$this->method) {
            if (isset($_POST[Config::get('var_method')])) {
                $this->method = strtoupper($_POST[Config::get('var_method')]);
                $this->{$this->method}($_POST);
            } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
                $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
            } else {
                $this->method = IS_CLI ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
            }
        }
        return $this->method;
    }
   
   改成:
   
    public function method($method = false)
    {
        if (true === $method) {
            // 获取原始请求类型
            return $this->server('REQUEST_METHOD') ?: 'GET';
        } elseif (!$this->method) {
            if (isset($_POST[Config::get('var_method')])) {
                $method = strtoupper($_POST[Config::get('var_method')]);
                if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
                    $this->method = $method;
                    $this->{$this->method}($_POST);
                } else {
                    $this->method = 'POST';
                }
                unset($_POST[Config::get('var_method')]);
            } elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
                $this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
            } else {
                $this->method = $this->server('REQUEST_METHOD') ?: 'GET';
            }
        }
        return $this->method;
    }


完事更新代码

相关文章