TP5框架版本5.0.10安全漏洞根据官方补丁修复,也是本站安全漏洞修复
因为是个人博客网站,很久以前学习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;
}
完事更新代码
相关文章