特集

ウェブサイトも“保守・修繕”の発想が必要。「PHPの脆弱性」から、経営層・サイト運営者に知っておいてほしいこと

 2026年10月21日の夜、プログラミング言語「PHP」の開発チームが、深刻な脆弱性2件を修正したバージョンを公開しました。開発チームは事前に公開を予告していて、公開の1時間ほど前には高市首相もXで「大至急のお願い」として、すぐに対応できるよう準備を呼びかけました。国内でも、レンタルサーバーの管理画面やクラウドサービスのほか、飲食店のポイントサービスやアーティストのファンクラブサイトまで緊急メンテナンスが相次ぎました。本稿の執筆時点でも、メンテナンスが続いているサービスはまだ多く残っています。

 この件に関して「アップデートすればよいだけでは」という声もあれば、「PHPは危険なのでは」という声も出ています。PHPで動くシステムの開発と保守を長年してきた立場から、首相が呼びかけるほどの事態になった理由と、システムを使い続けるために必要なことを整理します。

PHPとは何か

 PHPは、会員ログインや検索、ショッピングカートといったウェブサイトの機能を作るためのプログラミング言語です。そして、その言語で書かれたプログラムをサーバーの上で動かすソフトウェア(実行環境)の名前でもあります。調査会社のW3Techsによると、サーバーで使われている言語が判明しているウェブサイトのうち、69.3%でPHPが動いています(2026年10月24日現在)。企業の業務システムや、スマートフォンアプリとデータをやり取りする仕組みにも、PHPはよく使われています。

 同じ役割の言語には、JavaやRuby、Pythonなどもあります。その中でPHPが際立っているのは手軽さです。レンタルサーバーの多くはPHPと、PHPと連携して動くデータベースを最初から使えるようにしています。プログラムを書いてサーバーに設置(アップロード)すれば、すぐに動きます。PHPで動くソフトの代表例であるWordPressなら、専門の技術者がいない小さな組織や個人でも、設置するだけでサイトを始められます。

 ただ、この手軽さには裏返しの面もあります。作るのが簡単なぶん、公開したあとの保守が軽視されたり、見落とされたりしがちなのです。

 保守で欠かせないのが、PHPを対策済みの新しいバージョンに更新することです。しかし、更新は入れ替えれば終わりとは限りません。Windowsを新しいバージョンにすると、その上で動いていた業務ソフトが動かなくなってしまうことがあります。PHPも同じで、実行環境のPHPを新しくすると、その上で動いていたプログラムが正しく動かなくなることがあるのです。

 最近では、Windows 10のサポートが終わったときに業務ソフトがWindows 11で動くかを確かめた会社は多いでしょう。PHPで書かれた自社のプログラムも、新しいバージョンで動くかを自分たちで確かめ、必要なら直さなければなりません。この手間と費用が理解されず、「いま動いているからいいじゃないか」と古いまま放置されることも少なくありません。W3Techsの調査では、PHPのバージョンがわかるサイトの半数近くが、サポートの切れた古いバージョンで動いています。

今回の脆弱性は何だったのか

 脆弱性とは、攻撃に悪用されうるソフトウェアの弱点のことです。今回見つかった脆弱性は、実行環境としてのPHPの内部にありました。PHPで書かれたプログラムの側の問題ではありません。攻撃者がこの脆弱性を狙ってアクセスすると、特別な許可なしに、サーバー上で好きなプログラムを動かされてしまうおそれがあります。

 好きなプログラムを動かされると、そのサイトの権限でできることは、攻撃者にも全てできてしまいます。たとえば、サーバー上のファイルを書き換えてページを改ざんしたり、データベースに会員情報が保存されていればそれ抜き出したりできます。実質的にサーバーを乗っ取られた状態です。他の弱点と組み合わされれば、サーバー全体の管理者の権限を奪われたり、そのサーバーを足がかりに社内のネットワークへ入り込まれたりするおそれもあります。

 対象はPHPを利用している全てのウェブサイトです。また、修正版の公開前日には情報の一部が漏れてしまい、実際に攻撃が行われているのも観測されました。

 首相が自ら呼びかけたのは、PHPが多くの場所で使われているうえ、脆弱性の詳細が公開されればすぐにでも攻撃が始まると予想されたからでしょう。このところ国内でも、不正アクセスや情報漏えいの事件が相次いでいます。保守の行き届かないサイトも多いだけに、一刻も早い対応を促す必要があったのだと思います。

サポート中のバージョンなら、更新は難しくない

 PHPのバージョン番号は「8.4.27」のように、ピリオドで区切られた3つの数字でできています。

 前の2つの数字が変わる更新(たとえば8.3から8.4へ)を、新しい機能が加わり、一方で仕様も変わる更新として、本稿では「バージョンアップ」と呼びます。バージョンアップは毎年1回、11月ごろにあります。

 最後の数字だけが上がる更新(たとえば8.4.26から8.4.27へ)は「修正版」で、不具合や脆弱性の修正が中心です。新しい機能は基本的に加わらず、プログラムはそのまま動くように配慮されています。今回の緊急の更新も、この修正版です。

 ただし、修正版が出るのは、サポート期間中のバージョンだけです。サポート期間は8.4や8.5といったバージョンごとに決まっていて、今サポートされているのは8.2・8.3・8.4・8.5の4つです。

 これらのバージョンなら、修正版に入れ替えてPHPを再起動するだけで、たいていは済むはずです。普段から更新を続けていれば、いつもの作業の範囲で対応できます。

難しいのは、サポートの切れたバージョンで動くシステム

 対応が難しくなるのは、サポートの切れた古いバージョンで動いているシステムです。PHPの開発チームは、通常、サポートが終わったバージョンには修正版を出しません。今回は深刻さを考慮して、例外的に古いバージョン向けの修正も公開されましたが、次も同じ対応があるとは限りません。

 修正版が出なければ、基本的には、サポート中のバージョンに上げるしかありません。ところが、数年分のバージョンをまとめて上げようとすると、仕様の変化も数年分まとめてやってきます。プログラムの修正・変更と、全てのページや機能の確認が必要で、業務システムでは数週間以上かかってしまうこともあります。プログラムを作った人がもう関わっていない場合は、どこを直せばよいのか調べるところからになってしまうかもしれません。

緊急の更新はいつ来てもおかしくない

 今回の脆弱性は、1995年の公開から30年あまり開発が続いてきたPHPの中に、長く気付かれないまま残っていたものでした。長く使われてきたソフトウェアには、PHPに限らず、昔に作られた部分がたくさん残っています。

 そして、脆弱性が見つかるペースは、AIの普及とともに大きく上がっています。共同通信によると、2025年に見つかった脆弱性は4万8千件を超え、2021年の2.4倍になりました。AIで短時間に大量に見つけられるようになったことが背景にあるとされています。今回の発見にも、AIが使われました。

 見つける力が上がるのは、攻撃する側も同じです。発見に協力したOpenAIも、同じ能力が攻撃者による悪用を速めるおそれがあると指摘しています。

 今回の件を、滅多に起きない出来事だと考えない方がよいでしょう。PHPでも、他のソフトウェアでも、同じような緊急の更新は明日また起きてもおかしくありません。

保守は同じものを同じ条件で使い続けるためにある

 システムやアプリは、公開や納品の時点では、開発者が最善を尽くした状態になっています。その時点でわかっている問題がなかったとしても、次の瞬間から新しい脆弱性が見つかって、危険な状態になることがあります。

 だからこそ、保守が欠かせません。機能を追加しなかったとしても、定期的な更新が必要です。同じものを同じ条件、つまり「知られている脆弱性に対処した」状態で使い続けるためです。理想は、修正版が出るたびに適用し、数年に一度はサポート切れに対応してバージョンアップをしていくことです。

 マンションにたとえると、こまめな修正版の適用は日常の点検や補修に、数年に一度のバージョンアップは大規模修繕にあたります。たまに訪ねる程度の知人の部屋なら、手入れをしていなくても「まだ住める」と感じるかもしれません。でも、毎日住んでいる自分の部屋なら、水回りの不具合やドアのがたつきといった細かい不具合も気になるはずです。「動いているから」と手入れをしないのは、システムを自分の部屋ほどには見ていないからかもしれません。

 マンションでは、点検や補修は管理費から、大規模修繕は修繕積立金からまかないます。どちらも、住み続ける間は毎月払い続けるものです。システムでも、この2つの費用を前もって見込んでおくことが大切です。

 実際、今回の対応がスムーズに済んだところも少なくありません。普段から修正版をこまめに適用していて、今回もいつもと同じ手順で対応できたことが大きいと感じます。たとえばpixiv(ピクシブ)は、PHPの更新も普段のプログラムの更新と同じ手順で済む仕組みにしていて、修正版の公開から30分ほどでメンテナンスを終えています。条件に恵まれた面もあったとふりかえっていますが、日ごろの備えが生きた例といえます。

 今回はPHPそのものの脆弱性でしたが、更新が必要なのはPHPだけではありません。多くのシステムは、フレームワークやライブラリと呼ばれる、共通の土台や部品を組み合わせて作られています。WordPressのサイトなら、WordPress本体のほかに、テーマやプラグインも使っています。こうした部品にも、サーバーのOSやデータベースにも脆弱性は見つかり、それぞれに修正版やサポートの期限があります。PHPだけを新しくしても、他の部分が古いままでは安全とは言えません。

問われているのは、関わり続ける人がいるかどうか

 サポートの期限があるのは、他のプログラミング言語も同じで、PHPだけが危ないわけではありません。手軽に使えるという長所を考えれば、PHPは現在も有力な選択肢です。

 大切なのは、PHPかどうかではなく、そのシステムに保守のため関わり続ける人がいるかどうかです。関わり続ける人がいるなら、PHPのまま更新を続けていけばよいでしょう。難しいなら、更新を引き受けてくれるサービスを利用することや、自社が関わり続けられる技術で作り直すことも選択肢になります。

 AIの進歩は、この判断にも関わってきます。AIを使えば手直しの作業自体は軽くなりますが、自社で何が動いていて、いつまでに何をすべきかを判断する人は欠かせません。その判断には技術の理解が必要で、責任を持つことはAIには任せられません。「AIがあるのにエンジニアが必要なのか」という問いへの答えも、ここにあると筆者は考えます。

経営層とサイトの運営者にお願いしたいこと

 ただ、保守を続けるための費用や体制は、エンジニアだけでは決められません。そこで最後に、エンジニアではない方にお願いしたいことを3つ挙げます。PHPに限らず、自社のシステムを支えるソフトウェア全てに当てはまる話です。

  1. 自社のシステムやサイトが、どんなソフトウェアのどのバージョンで動いているかを知る。それぞれのサポートの期限も確認する。わからなければ、制作・開発した会社や保守を頼んでいる会社に聞いてみる。PHPなら、8.2のサポートは2026年12月31日に終わります
  2. 更新を誰が担うのかを決める。レンタルサーバーなら、PHPやOSの更新は事業者が行うのが一般的ですが、サイトで使っているソフトの更新は利用者の役割です。自分たちで管理するサーバーなら、クラウドのものも含めて更新は自分たちの責任です。制作・開発会社に保守を頼んでいても、サーバーやソフトウェアの更新は契約に含まれていないことがあります
  3. こまめな修正版の適用と、数年に一度のバージョンアップを、使い続けるための費用として毎月・毎年の予算に組み込んでおく

 システムの運用を担当する技術者から「更新したい」と相談されたら、それは今回のような事態に備えるための相談です。費用と時間を確保できるよう、後押ししてもらえればと思います。

山岡 広幸

Webエンジニア。合同会社テンマド・代表社員、技術書ライブラリー・ディレクター。
自社でのWebサービス開発を行っているほか、幅広いクライアントのアドバイザー案件、Webシステム開発案件に携わる。技術系カンファレンスでの登壇多数。PHPに関しては、20年以上のシステム開発経験がある。