ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案

ThinkPHP 小于5.0.24 远程代码执行高危漏洞 修复方案

漏洞描述

由于ThinkPHP5.0框架对Request类的method处理存在缺陷,导致黑客构造特定的请求,可直接GetWebShell。

漏洞评级
严重

影响版本
ThinkPHP 5.0系列 < 5.0.24

安全版本
ThinkPHP 5.0系列 5.0.24
ThinkPHP 5.1系列 5.1.31

安全建议
升级ThinkPHP至安全版本
修复方法1.打开
\thinkphp\library\think\Request.php
搜索

public function method($method = false) { if (true === $method) { // 获取原始请求类型 return $this->server('REQUEST_METHOD') ?: 'GET'; } 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 = $this->server('REQUEST_METHOD') ?: 'GET'; } } 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; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112515.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Velocity语法大全

    Velocity语法大全一、基本语法 1、”#”用来标识Velocity的脚本语句,包括#set、#if、#else、#end、#foreach、#end、#iinclude、#parse、#macro等; 如: #if($info.imgs) <imgsrc=”$info.imgs”border=0> #else <imgsrc=”noPhoto.jpg”> #end2、”$”用来标识一个对象(或理解为…

    2022年7月14日
    17
  • golang练手小项目系列(6)-使用map实现set

    golang练手小项目系列(6)-使用map实现set问题描述go没有提供set数据结构,请用map实现set要点需要支持方法:Add添加元素Remove删除元素Cardinality获取Set长度Clear清空SetContains检测元素是否在Set中Pop()随机删除一个元素并返回被删除的元素ToSlice()[]interface{}转换成slice返回拓展Clone复制SetDi…

    2025年6月30日
    2
  • TCP和UDP协议的区别_朋友关系

    TCP和UDP协议的区别_朋友关系在解释两者之间的关系之前,我们必须从宏观的角度了解互联网的整个交互模型。因为当了解互联网在大体上是如何运作时,我们才能了解HTTP和TCP存在的意义,包括他们所要解决的问题是。 (此图来自Udacity的网络协议教程)互联网的模型被分为4层,从上至下每一层都依赖其底层协议。换言之,Application(应用层)的协议操作成功的前提是Transport(运输层)的存在。没有运输层就没有应…

    2026年2月4日
    4
  • BatchNorm2d原理、作用及其pytorch中BatchNorm2d函数的参数讲解

    BatchNorm2d原理、作用及其pytorch中BatchNorm2d函数的参数讲解BN原理、作用:函数参数讲解:BatchNorm2d(256,eps=1e-05,momentum=0.1,affine=True,track_running_stats=True)1.num_features:一般输入参数为batch_sizenum_featuresheight*width,即为其中特征的数量,即为输入BN层的通道数;2.eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5,避免分母为0;3.momentum:一个用于运行过程中均值和方差的一个估

    2022年6月10日
    52
  • 使用Eclipse-Maven-git做Java开发(5)–Eclipse的Java项目的创建过程

    使用Eclipse-Maven-git做Java开发(5)–Eclipse的Java项目的创建过程

    2021年9月8日
    58
  • 乱码_idea控制台中文乱码解决不了

    乱码_idea控制台中文乱码解决不了IntelliJIDEA如果不进行配置的话,运行程序时控制台中文乱码问题会非常严重,甚至影响我们对信息的获取和程序的跟踪。通过历年的开发经验,在本文中我总结出四点用于解决控制台中文乱码问题的方法,希望有助于大家。

    2025年6月12日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号