【個人開発記録①】PHPの重大な脆弱性に振り回された数日間――サイトを守るために学んだこと
突然飛び込んできたセキュリティのニュース
10月下旬、いつものように開発やブログの管理をしていたところ、気になるニュースが目に入りました。
PHPに、重大なセキュリティ上の問題が見つかったというのです。
今回話題になったのは、「php2shell」と呼ばれる脆弱性でした。
PHPは、Webサイトを動かすために使われるプログラミング言語の一つです。
私がブログの運営に使っているWordPressも、PHPを利用しています。
つまり、今回のニュースは決して他人事ではありませんでした。
「私のサイトは大丈夫なのだろうか?」
そう思った瞬間から、予定していた作業をいったん止め、セキュリティ対策に取り組むことになりました。
そもそも「脆弱性」って何?
脆弱性とは、簡単にいうと、プログラムやシステムに存在する「安全上の弱点」のことです。
例えば、家に例えるなら、鍵をかけているつもりでも、特定の方法で開けられてしまう扉が見つかったようなものです。
今回のような重大な脆弱性では、条件によっては外部から不正なプログラムを実行される危険があります。
ただし、脆弱性が見つかったことと、自分のサイトが実際に攻撃されて被害を受けたことは別の話です。
まず必要なのは、慌てて何でも変更することではなく、自分の環境が影響を受けるのか確認することでした。
まずはWordPressの環境を確認
私はPHPを本格的に扱い始めて、まだ1年ほどです。
そのため、今回のようなセキュリティ対応には、分からないことがたくさんありました。
最初に確認したのは、次のような項目です。
- 現在使っているPHPのバージョン
- 脆弱性が修正されたバージョン
- WordPressが正常に動作するか
- サーバーの設定
- バックアップが利用できる状態か
私のブログは、X(旧シンフリー)サーバーの環境で運営しています。
調べていくと、PHPのバージョンだけでなく、サーバー側の設定やWordPressとの互換性も確認する必要があると分かりました。
ここで難しかったのが、安全性を高めるための変更が、別の不具合につながる可能性もあるということです。
新しいバージョンに更新すれば、それだけですべて解決するとは限りません。
だからこそ、変更後の動作確認も欠かせませんでした。
PHPを更新したら終わり、ではなかった
今回の対応では、PHPを修正版の8.3.36へ更新しました。
その後、WordPressが問題なく動くかを確認しました。
トップページだけでなく、固定ページや管理画面、フォームの表示なども一つずつチェックしました。
確認した範囲では、重大な表示上の不具合は見つかりませんでした。
ひとまず、ほっとしました。
しかし、そこで作業が終わったわけではありません。
「現在は安全なバージョンを使っている」ことと、「過去に不正アクセスを受けていない」ことは、同じではないからです。
そこで、アクセスログの確認も進めました。
アクセスログを調べるという作業
アクセスログとは、Webサイトにどのようなアクセスがあったのかを記録したものです。
どのページにアクセスされたのか。
どのような通信が行われたのか。
不自然なアクセスはないか。
こうした情報を調べることで、攻撃の痕跡がないか確認する手がかりになります。
今回は、以前利用していたWordPress環境についても確認し、不要になった旧サイトを削除しました。
調べたログの範囲では、侵害が成功したことを示す明確な証拠は見つかりませんでした。
ただし、ログだけですべてを判断できるわけではありません。
確認できたことと、まだ確認できていないことを分けて考える必要があります。
ここでも、AIとの対話が役立ちました。
AIは便利。でも、セキュリティの判断は慎重に
今回も、AIに多くの質問をしました。
「このPHPのバージョンは修正済み?」
「このログは何を意味しているの?」
「この設定を変更すると、何が起きる?」
「次はどこを確認すればいい?」
AIは専門用語をかみ砕いて説明してくれますし、複雑な作業を順番に整理する手助けにもなります。
しかし、セキュリティ対策では、AIの説明をそのまま信じて作業するのは危険です。
AIの回答にも間違いや情報の古さがあるかもしれません。
そのため、公式の情報や実際のサーバー設定、動作結果を確認しながら進めることを意識しました。
AIに判断を丸投げするのではなく、AIを使って自分が確認すべきことを整理する。
これは、これまでのアプリ開発でも大切にしてきた考え方です。
さらに重なったパソコンの環境移行
実は、このセキュリティ対応と並行して、新しいパソコンへの作業環境の移行も進めていました。
新しく購入した高性能CPU搭載のパソコンに、開発で使うソフトを入れ直し、設定を整え、以前の環境を再現する作業です。
ただでさえ環境移行には時間がかかります。
そこに今回のPHPの問題が重なりました。
新しいパソコンの設定を進めながら、WordPressの状態も確認する。
途中で問題が見つかれば、また調べ直す。
そんな作業が続き、気がつけば夜を徹して対応していることもありました。
創作活動やカクヨムでの交流も、しばらく控えめになってしまいました。
不安なときほど、一つずつ確認する
私は以前、技術的な問題がいくつも重なると、何から手をつければよいのか分からなくなることがありました。
今回も、最初は不安でした。
「サイトが攻撃されていたらどうしよう」
「設定を間違えて、サイトを壊してしまったら?」
「何を確認すれば安心できるのだろう?」
考え始めると、心配は次々と増えていきます。
そこで今回は、作業を小さく分けました。
- 現在の状態を確認する
- 影響を受ける可能性を調べる
- 必要な更新を行う
- サイトの動作を確認する
- ログやバックアップを確認する
- 確認できたことを記録する
一度にすべてを解決しようとしない。
今確認していることを終えてから、次へ進む。
この方法が、混乱を減らす助けになりました。
セキュリティ対策は、仕事の進め方を学ぶ機会でもある
今回の経験は、Webサイトの安全性を確認するだけでなく、仕事の進め方について考える機会にもなりました。
特に大切だと感じたのは、次のことです。
- 問題が起きたら、まず事実を確認する
- 分からないことを想像で補わない
- 一度に多くの設定を変更しない
- 変更前と変更後の状態を比較する
- 作業結果を記録しておく
- 必要に応じてAIや資料を活用する
こうした方法は、プログラミング以外の仕事でも役立つと思います。
また、自分が苦手だと感じている作業でも、手順を整理し、確認する仕組みを作れば取り組みやすくなることを、改めて実感しました。
「作ること」と同じくらい「守ること」も大切
これまで私は、マイレースやANSHIN ROOMなどの開発を通じて、新しい機能を作ることに力を入れてきました。
画面を作る。
プログラムを書く。
動くようにする。
使いやすく改善する。
どれも大切な作業です。
しかし今回、改めて気づいたことがあります。
Webサービスは、完成したら終わりではない。
使い続けるためには、更新や点検、バックアップなどの管理も必要です。
どれほど便利な機能を作っても、安心して使える環境がなければ意味がありません。
特に、利用者の情報を扱うサービスでは、セキュリティを後回しにはできません。
今回のWordPressでの経験は、今後のアプリ開発にも活かしていきたいと思っています。
今回の経験から
数日間、PHPの脆弱性への対応に追われました。
予定していた開発や創作も、思うようには進みませんでした。
それでも、今回の経験は決して無駄ではなかったと思います。
以前の私なら、分からないことが重なると、途中で諦めていたかもしれません。
今回はAIの助けも借りながら、必要な情報を調べ、一つずつ確認していくことができました。
もちろん、セキュリティに「これで永久に安心」という状態はありません。
これからも新しい問題が見つかるかもしれません。
それでも、
問題が起きないことだけを目指すのではなく、問題が起きたときに確認し、対応できるようになる。
その力を少しずつ身につけていきたいと思います。
そして、落ち着いたら、またアプリ開発や小説の執筆にも時間を戻していきたいです。
作ることも、守ることも、学び続けること。
今回の数日間は、そんな大切なことを教えてくれた経験でした。


