如何修复PHP的GD库漏洞

发布于 2018-02-03  0 次阅读


最近有关于台湾大神爆出的PHP的GD库漏洞,该漏洞可通过上传构造后的GIF图片,可直接导致CPU资源耗尽,直至宕机。
该漏洞是由于GD图形库中的gd_git_in.c具有整数签名错误,通过特殊构造的GIF文件使程序在调用imagecreatefromgif或imagecreatefromstring的PHP函数时导致无限循环。
该漏洞影响范围较广,漏洞版本:
PHP 5< PHP 5.6.33
PHP 7.0
PHP 7.1
PHP 7.2
目前PHP官方(php.net)已经发布了更新版本,下面说一下更新到最新版本的几个方法。
以下只通过CentOS系统描述:
首先确认之前的PHP是通过rpm包安装的,还是通过编译安装的,若是通过rpm包安装的,需要确认是通过哪个源安装的,确认方法:
rpm -qa grep php
如果什么都没有出现,那就是编译安装的,如果出现php及扩展包,则是通过rpm包安装的,那么升级就分两种方式,编译安装的,需要从官网下载最新小版本重新你编译,rpm包安装的,可以直接通过yum进行升级。
1
remi 源
首先选择合适的版本,安装remi源,若已安装,请跳过
CentOS6.x:
CentOS7.x:
安装后直接通过yum命令更新php
yum update php
更新完成后,若是apache,且是mod模式,则重启apache,若是fpm模式,则重启php-fpm,若是nginx,则从其nginx,查看PHP版本
2
webtatic 源
webtatic源地址:https://webtatic.com
同样首先选择合适的版本,安装webtatic源,若已安装,请跳过
CentOS/RHEL 7.x:
CentOS/RHEL 6.x:
安装完成后,直接通过yum命令更新php,因为webtatic是将php几个版本最新包放在测试源中,所以更新时要加参数--enablerepo=webtatic-testing
根据服务器目前php版本包进行更新,更新命令如下:
3
编译安装
PHP官网地址:php.net
从PHP官网下载你需要的大版本的最新小版本源码包,我这里是php7.1.4,需要更新到php7.1.13。
查看原版本的编译参数:php -i grep configure
复制编译参数,解压之前下载的最新源码包,用之前的编译参数重新编译php,这里注意修改prefix参数的值,不然覆盖掉原来的php了,还需要检查一下是否有之后添加的扩展,也需要重新添加。
完成后,通过php -m参数对比两个版本的php的扩展,是否一致,若一致,则可以将php迁移到最新版本的php了。


一曲肝肠断,何处觅知音。