Help us understand the problem. What is going on with this article?

RHEL/CentOS 7のPHP5.4.16 は安全か?

More than 1 year has passed since last update.

この記事は RHEL/CentOS 6のPHP5.3.3 は安全か? の RHEL/CentOS 7 版です。

よく、 CentOS7.x にバンドルされている PHP5.4.16 を使用していると、

「まだ PHP5.4 なんて使ってるの?? セキュリティに対する意識あんの??」

って言われます。

確かに、PHP5.4.16 は2013年にリリースされたとても古いバージョンですし、5.4 系は2015年9月3日にリリースされた 5.4.45を最後に公式のサポートを終了しています。

でも、 CentOS7.x の PHP は、リリース当初の2014年から、 5.4.16 のままです。2017年12月現在でも、 5.4.16 のままです。これには理由があります。

CentOS は Linux の商用ディストリビューションである Redhat Enterprise Linux(RHEL) の、公開されたソースを元にしたディストリビューションであり PHP などのプログラム言語やアプリケーションも、 RHEL のパッケージを元に作成されています。
RHEL は、これら PHP などのパッケージを、独自に保守(ベンダーサポート)しており、何らかの脆弱性が見つかると、適宜アップデートされます。
CentOS も、基本的に RHEL のアップデートポリシーに準拠しており、 7.x は2024年6月30日まではサポートされます。

つまり、 CentOS7.x にバンドルしている PHP5.4.16 は、適切にアップデートしていれば、2024年6月30日まで安心して使うことができます。

では、本当に安心して使えるのか調べてみましょう。

2016年12月14日現在、 CentOS7.x での PHP の最新パッケージは php-5.4.16-42.el7 です。
ちなみに、 CentOS では、パッケージがアップデートされると、メーリングリストにこのような メールが流れます。

RHEL でリリースされたものを CentOS でクレジット等を修正してリリースするため、リリースにタイムラグが発生するようです。

まず、 PHP の SRPM ファイルを取得します。
RHEL7 より、 SRPM のリポジトリは https://git.centos.org/project/rpms に統合されたようです。

php-5.4.16-42.el7 のソースは、以下にあります。
https://git.centos.org/commit/rpms!php/8d87dc7113e1c756c4ddb82ef393ae85c2eeb6bb

差分に含まれるファイル、以下のような内容になっています。

php-5.4.16-42.el7.patch
From 8d87dc7113e1c756c4ddb82ef393ae85c2eeb6bb Mon Sep 17 00:00:00 2001
From: CentOS Sources <bugs@centos.org>
Date: Thu, 03 Nov 2016 06:07:09 +0000
Subject: [PATCH] import php-5.4.16-42.el7

---
 SOURCES/php-5.4.16-CVE-2016-5766.patch |   94 +++++
 SOURCES/php-5.4.6-bug65641.patch       |  118 +++++++
 SOURCES/php-5.4.16-bug71089.patch      |   31 +
 SOURCES/php-5.4.16-curltls.patch       |   38 ++
 SOURCES/php-5.4.16-CVE-2016-5767.patch |   30 +
 SPECS/php.spec                         |   58 +++
 SOURCES/php-5.4.16-CVE-2016-5399.patch |   47 ++
 SOURCES/php-5.4.16-bug66833.patch      |   40 ++
 SOURCES/php-5.4.16-CVE-2016-5768.patch |  284 +++++++++++++++++
 SOURCES/php-5.4.16-bug66762.patch      |  137 ++++++++
 SOURCES/php-5.4.16-wddx.patch          |   41 ++
 11 files changed, 912 insertions(+), 6 deletions(-)                                                                                                                                                             

さまざまなパッチが含まれていることがわかります。
CVE とついているのが、セキュリティパッチです。
この中の CVE-2016-5399 を見てみると、 PHP 7.0.8, 5.6.23, 5.5.37 で修正された不具合がバックポートされているのがわかります。

php-5.4.16-CVE-2016-5399.patch
From f3feddb5b45b5abd93abb1a95044b7e099d51c84 Mon Sep 17 00:00:00 2001
From: Stanislav Malyshev <stas@php.net>
Date: Mon, 18 Jul 2016 22:20:45 -0700
Subject: [PATCH] Partial fix for bug #72613 - do not treat negative returns
 from bz2 as size_t

---
 ext/bz2/bz2.c               |  80 +++++++++++++++++++++++---------------------
 ext/bz2/tests/72613.bz2     | Bin 0 -> 351 bytes
 ext/bz2/tests/bug72613.phpt |  23 +++++++++++++
 3 files changed, 65 insertions(+), 38 deletions(-)
 create mode 100644 ext/bz2/tests/72613.bz2
 create mode 100644 ext/bz2/tests/bug72613.phpt

diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c
index de3250e..7cfcaa8 100644
--- a/ext/bz2/bz2.c
+++ b/ext/bz2/bz2.c
@@ -137,16 +137,20 @@ struct php_bz2_stream_data_t {
 static size_t php_bz2iop_read(php_stream *stream, char *buf, size_t count TSRMLS_DC)
 {
    struct php_bz2_stream_data_t *self = (struct php_bz2_stream_data_t *) stream->abstract;
-   size_t ret;
-   
-   ret = BZ2_bzread(self->bz_file, buf, count);
+   int bz2_ret;
+
+   bz2_ret = BZ2_bzread(self->bz_file, buf, count);

-   if (ret == 0) {
+   if (bz2_ret < 0) {
+       stream->eof = 1;
+       return -1;
+   }
+   if (bz2_ret == 0) {
        stream->eof = 1;
    }

-   return ret;
+   return (size_t)bz2_ret;
 }

 static size_t php_bz2iop_write(php_stream *stream, const char *buf, size_t count TSRMLS_DC)
 {

このように、適切にアップデートされた CentOS7.x の PHP5.4.16 は安全です。

プログラマーの立場からすると、最新のプログラム構文が使えないのは、ストレスに感じるかもしれません。
常に新しいバージョンにアップデートできれば良いのですが、コストやリソースの問題もあり、すべての環境でアップデートできるとは限りません。

特に、 PHPの主要なフレームワークのサポート期間は4年程度である場合が多く、長期的に保守されるプロダクトの場合は注意が必要です。
枯れているから、、という理由で採用すると、案件をリリースして間もなくサポート切れになってしまうことになりかねません。

Linux ディストリビューションの長期サポートとも上手くおつきあいするのも、プログラマーの大切なスキルの一つだと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away