レンタルサーバーなら、PHP本体の修正はサーバー会社が行います。利用者がやることは「止めるかどうかの判断」と「戻せる準備」です。迷ったら、ファイルとデータベースのバックアップを取り、PHPだけを止めて、外から止まったことを確かめる。同じサーバーにある使っていないサイトも、まとめて止めてください。
2026年10月21日の夜、「今夜中に対応してください」という異例の呼びかけが国から出されました。対象は、世界中のWebサイトで使われているプログラミング言語「PHP」です。WordPressもPHPで動いています。
大手サービスが相次いで緊急メンテナンスに入るなか、私たち運営元も自社で管理しているWebサイトを一晩、一時停止しました。この記事では、そのとき実際にやったことを順番どおりに記録します。
何が起きたか(公表の内容)
PHPの開発チームが重大な脆弱性2件を公表し、日本時間10月21日23時に修正版を公開しました。
| 項目 | 内容 |
|---|---|
| 脆弱性 | CVE-2026-109618 / CVE-2026-109619 |
| 深刻度 | CVSS v4.0 9.2(Critical)×2件 |
| 種類 | 認証不要のリモートコード実行(外からサーバーに命令を実行させられる) |
| 影響 | Webリクエストを処理するPHP全般(PHP-FPM・Apacheのmod_php・LiteSpeedなど) |
| 修正版 | 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
| 修正版なし | 8.1以下(公式の更新は終了) |
注意したいのは次の2点です。
- WordPressなどのアプリが動く手前で攻撃が成立するため、WordPressのセキュリティプラグインでは防げません
- 修正版の公開前に、悪用方法がネット上に出回ったとの情報がありました
国家サイバー統括室も、修正パッチの適用が難しい場合は、Webサイトを一時的に止めることもリスクを下げる有効策の一つだとしています。
乗っ取られていたら、何が起きていたか
「会社案内のサイトだから、書き換えられても大した被害はない」と考えがちですが、実際には被害はサイトの中だけでは収まりません。PHPはサーバーアカウントの権限で動くため、そのアカウントで触れるものすべてが対象になります。
| 狙われるもの | 被害の例 |
|---|---|
| 同じサーバー内の他のサイト | 1つのサイトから入られると、同じアカウントにある全サイトのファイルを書き換えられる |
| データベース | 設定ファイルにパスワードがあるため、お問い合わせの履歴(氏名・会社名・メール・電話)や会員情報を抜き取られる |
| メール | サーバーに保存されたメールを読まれる。自社ドメインから詐欺メールを大量に送られる |
| 検索結果と信用 | 改ざん、詐欺サイトへの転送、ブラウザの「危険なサイト」警告。自社のメールが迷惑メール扱いされる |
問い合わせ情報が漏れれば、問い合わせをくれた人への連絡や、当局への報告が必要になることもあります。漏れた連絡先は、やがて詐欺メールや不正ログインに使われる「名簿」として出回ります。
サーバーを棚卸ししてみると、昔作ってそのままのWordPressや、転送のためだけに残したサイトが複数ありました。更新されていない放置サイトほど狙われやすく、そこから同じアカウントの全サイトに手が届きます。止めるなら全部。そして、使っていないサイトは普段から消しておく。今回いちばんの学びでした。
作成者 矢嶋一晩でやったこと(順番どおり)
1. サーバー会社の状況を確認する所要 5分
レンタルサーバーの場合、PHP本体の修正はサーバー会社が行います。利用者が自分で修正版を入れる必要はありません。
ただ当日は、サーバー会社が予防措置として管理画面を止めていて、自社サイトのPHPのバージョンも、対策がもう効いているかも確認できませんでした。確認できないこと自体がリスクだと判断し、自分たちで止めることにしました。
2. ファイルとデータベースを両方バックアップする所要 30分
止める前に、まず「戻せる状態」をつくります。
| 対象 | 取り方 |
|---|---|
wp-config.php・.htaccess | FTPでダウンロード |
wp-content(テーマ・プラグイン・画像) | FTPでダウンロード |
| データベース(記事・ページ・設定) | WordPressの管理画面から、バックアッププラグインで出力 |
各サイトの元の .htaccess | FTPでダウンロード(戻すときに使う) |
記事やページの本文はデータベースの中にあります。FTPで取れるのはファイルだけなので、データベースは別に取ってください。
3. サーバー内のサイトを全部洗い出す所要 15分
public_html の中に .php ファイルがあるサイト(WordPressなど)が対象です。HTMLだけで作られたページは、今回の攻撃の対象外なので対応しませんでした。
メールの保存場所や、Webから届かないフォルダ(cronのスクリプト置き場など)も対象外です。外からのリクエストで動くPHPだけが今回の入口になります。
4. .htaccess でPHPを止め、メンテ画面を出す所要 各3分
各サイトの .htaccess(サーバーの動きを決める設定ファイル)の先頭に、次の内容を足しました。元の設定はその下にそのまま残すので、戻すときは足した部分を消すだけです。
# BEGIN Emergency Maintenance
DirectoryIndex index.html
ErrorDocument 503 /index.html
<IfModule mod_authz_core.c>
<FilesMatch "(?i)\.(php[0-9]?|phtml|phar)$">
Require all denied
</FilesMatch>
</IfModule>
<IfModule mod_headers.c>
Header always set Retry-After "3600" "expr=%{REQUEST_STATUS} == 503"
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^index\.html$ - [END]
RewriteRule ^ - [R=503,END]
</IfModule>
# END Emergency Maintenance
やっていることは2つです。
- PHPファイルへのアクセスをすべて拒否する(403)。PHPが動かなければ、今回の攻撃は成立しません
- それ以外はメンテナンス画面へ(503)。検索エンジンにも「一時的な停止」と伝わるので、検索順位への影響を抑えられます
あわせて、同じ場所にメンテナンス告知の index.html を置きます。転送だけしているサイトは、PHPを拒否する部分だけを足して、転送は生かしました。

告知文は「なぜ止めているか」「いつ戻るか(未定なら未定と書く)」「急ぎの連絡先」の3点に絞りました。問い合わせ窓口がメンテ画面から消えると、取引先が連絡手段に困るためです。
元の .htaccess は必ずダウンロードして保管してください。もともと index.html があるサイトでは、上書きで元のページが消えます。
5. 外から本当に止まったか確かめる所要 5分
設定して終わりにせず、外からアクセスして確かめます。
| アクセス先 | 期待する結果 |
|---|---|
| トップページ | メンテナンス画面(503) |
https://自社ドメイン/wp-login.php | 403(アクセス拒否)=PHPが止まっている |
サブドメインやサブフォルダの .php | 403(親の設定が効いている) |
一部のページで以前の表示が残ることがあります。これはサーバーのキャッシュ(保存済みの静的なページ)が返っているだけで、PHPは動いていません。URLの末尾に ?test=1 などを付けると、メンテ画面に変わったことを確かめられます。
元に戻すときの注意
サーバー会社から修正の適用完了の告知が出たら、元の .htaccess を戻し、足した index.html を消します。その前に、次の3つを確かめてください。
PHPのバージョンを確認する所要 5分
修正版が出ているのは 8.2〜8.5 です。8.1以下には公式の修正版がありません。サーバーの管理画面で 8.3 などに切り替えてください。なお 8.2 は2026年12月31日でサポートが終わります。
入り込まれていないか確認する所要 15分
止めるまでの間に攻撃を受けていた場合、裏口(バックドア)が残っていることがあります。最近書き換えた覚えのないPHPファイルや、画像フォルダ(uploads)に紛れ込んだPHPファイルがないか確認してください。
WordPress本体とプラグインを更新する所要 30分
今回の件とは別に、古いままのWordPressやプラグインも侵入口になります。更新の前にもう一度データベースのバックアップを取ってから、まとめて更新しましょう。
まとめ
- サーバー会社の告知で、修正の状況を確認した
- ファイルとデータベースの両方をバックアップした
- 同じサーバーにあるPHPのサイトを全部洗い出した
- 元の
.htaccessを退避してから、PHPを止める設定を足した - 外から、トップが503・
wp-login.phpが403になることを確かめた - 戻す前に、PHPのバージョンと不審なファイルを確認した
- 使っていないサイトの片付けを予定に入れた
