游客
管理员
管理员
  • UID1
  • 粉丝5
  • 关注0
  • 发帖数44
阅读:3149 回复:1

关于20190111号Thinkphp官方公布漏洞修复方法

楼主#
更多 发布于:2019-01-11 17:36
找到网站根目录下的 thinkphp\library\think\Request.php 文件 打开大约 500行
找到 public function method($method = false)  这一个方法, 将原来的整个方法代码 替换为如下新的方法代码
以下是修改前的代码



   /**
    * 当前的请求类型
    * @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;
   }


以下是替换后的代码




    /**
     * 当前的请求类型
     * @access public
     * @param bool $method true 获取原始请求类型
     * @return string
     */
    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;
    }




把这整个方法替换就可以了

然后强烈建议网站做备份, 阿里云后台可以配置自动备份,
参考文章很简答的配置一下就每天自动备份 http://bbs.tp-shop.cn/read.php?tid=2889&fid=2

SpiRit-moon
贫民
贫民
  • UID14854
  • 粉丝0
  • 关注0
  • 发帖数1
沙发#
发布于:2019-02-26 19:28
就不能直接composer指定版本升级吗
游客

返回顶部