### 2018 年 12 月 9 日 发布 >[danger]### 本次版本更新主要涉及一个安全更新,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的`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`方法 * 修正控制器名获取