2018 年 12 月 9 日 ThinkPHP 官方发布一次重要安全更新,本次版本更新主要涉及一个 ThinkPHP5.0.*-5.1.*的全系列安全漏洞,由于框架对控制器名没有进行足够的检测会导致在没有开启强制路由的情况下可能的 getshell 漏洞,也就是攻击者可以构造特定的恶意请求直接获取服务器权限。请广大 ThinkPHP 开发者尽快更新到该版本!
更新框架修复
如果你使用 composer 安装,并且一直保持最新版本使用的话,使用下面的指令更新到最新版本即可
composer update topthink/framework
如果你使用了 git 版本库安装,也请及时更新你所用的仓库版本。
如果各种原因暂时无法更新到最新版本(早期版本升级到最新版本可能存在兼容性问题,请首先参考官方手册的升级指导章节),可以参考下面的方式进行手动修正。
手动修复
5.0 版本:在 thinkApp 类的 module 方法的获取控制器的代码后面加上
if (!preg_match('/^[A-Za-z](w|.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }

5.1 版本:在 thinkroutedispatchUrl 类的 parseUrl 方法,解析控制器后加上
if ($controller && !preg_match('/^[A-Za-z](w|.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); }

声明:1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。







