ThinkPHP5.*版本发布安全更新

  • 时间:2019-01-03 22:53
  • 来源:ThinkPHP官方博客
  • 作者:流年
  • 阅读:1891
本次版本更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的getshell漏洞,受影响的版本包括5.0和5.1版本,推荐尽快更新到最新版本。

更新框架修复

如果你使用composer安装,并且一直保持最新版本使用的话,使用下面的指令更新到最新版本即可

composer update topthink/framework

如果你使用了git版本库安装,也请及时更新你所用的仓库版本。

如果各种原因暂时无法更新到最新版本(早期版本升级到最新版本可能存在兼容性问题,请首先参考官方手册的升级指导章节),可以参考下面的方式进行手动修正。

手动修复

5.0版本

在think\App类的module方法的获取控制器的代码后面加上

if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
    throw new HttpException(404, 'controller not exists:' . $controller);
}

5.1版本

在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上

if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
    throw new HttpException(404, 'controller not exists:' . $controller);
}

V5.1.31主要更新日志

改进field方法

改进count方法返回类型

download函数增加在浏览器中显示文件功能

修正多对多模型的中间表数据写入

改进sqlsrv驱动支持多个Schemas模式查询

统一助手函数与\think\response\Download函数文件过期时间

完善关联模型的save方法 增加make方法仅创建对象不保存

修改条件表达式对静态变量的支持

修正控制器名获取

改进view方法的field解析

V5.0.23主要更新日志

Query支持调用模型的查询范围

聚合查询字段支持DISTINCT

改进闭包验证的参数

多对多关联支持指定中间表数据名称

after/before验证支持指定字段验证

改进多对多关联

改进验证类

增加afterWith和beforeWith验证规则 用于比较日期字段

完善规则提示

改进断线重连

修正软删除的destroy方法

修复模型的save方法当data变量为空 数据不验证

模型增加replace方法

MorphOne 增加 make 方法创建关联对象实例

改进count方法返回值类型

改进聚合查询方法的正则判断

改进sqlsrv驱动

完善关联的save方法

修正控制器名获取