WordPressの更新相談を受けたら、何をどの順で調べるか

  • WordPress
  • 運用
  • セキュリティ
  • 保守
  • 見積

「このサイト、更新したほうがいいですか?」という相談は、プラグインや本体のバージョンが並んだ表を見るだけでは答えにくい。よしあきは、まず切り分けの順番を決めてから、部品(プラグイン・テーマ)の古いまま残っている更新を見るようにしている。この記事はその手順の話である。

案件の固有事情は書かない。読者が自分のサイト、あるいは依頼を受けたサイトで同じ順番を試せるようにする。

手順を一文でまとめると

よしあきが相談を受けたあとにやっている順番は、だいたい次のとおりだ。

  1. 取れるなら Site HealthXML(サイトマップ/必要ならエクスポート)で版と構成を先に揃える
  2. Site Health の現行版を latest・脆弱性DB・ベンダー告知 と照らし合わせる
  3. 緊急の要否と、本体/PHP の新しさを切る
  4. 部品は「未認証で悪用されうるか」を軸に並べる(権限前提は運用で現実リスクを補正)
  5. そのサイトの版で当て直す(他サイトの表は使わない)
  6. バックアップ用途も同じ軸で見る
  7. ページ組み立て系は確認工数を別枠で見る(XML の地図を材料にする)
  8. 説明は「何が起きうるか」まで言い切る
  9. 単発/継続の枠と、サイト固有の差額で見積に落とす
  10. 版が取れない箇所は推測せず未確認のまま残す

以下、この順番に沿って中身を書く。

情報は Site Health と XML でまとめて取る

画面をひとつずつ開いて版を手書きするのは遅い。よしあきは、取れるときは次の二つを先に揃える。

Site Health(サイトヘルス)の情報

管理画面の ツール → サイトヘルス → 情報 から、サイトの情報をまとめてコピーできる。ここを正本にすると、次が一気に揃いやすい。

  • WordPress 本体の版
  • PHP の版
  • テーマ
  • 有効/停止中のプラグインと、それぞれの現行版(と、画面上に出る最新版の手がかり)

プラグイン一覧を管理画面で目視しながら表を埋めるより、一度吐き出してから照らし合わせるほうが抜けが減る。土台(本体/PHP)と、部品側の古いまま残っている更新を、同じ素材から切れるのも大きい。

Site Health で掴んだ「いまの版」は、主に次と照らし合わせる。

照らし合わせ先見ること
Site Health 上の最新版の手がかり現行と latest の差。最新からどれだけ遅れているか
脆弱性データベースPatchstackWPScanWordfence Intelligence など)現行版が影響範囲に入るか。修正版があるか
ベンダーや公式の告知データベースに無い/遅れている注意点の補完

取り方は、日常の監視と、相談サイトの突合で分けている。

  • 日常(よく使う部品の横断ウォッチ)Wordfence Intelligence の API でフィードを取り、自分のウォッチ一覧に載っているものだけに絞る。WordPress 本体や PHP は、公式のリリース情報やサポート期限の公開データも見る。仕組みの選び方は別稿に書いた。
  • 相談サイト(Site Health の版を当てるとき) — フィードを全部読むのではなく、入っている部品だけを PatchstackWPScan公開ページで検索して当てる。データベースに無い・遅いときは、プラグイン作者や WordPress.org の告知、必要なら PHP / コアの公式発表を開く。

優先度に載せるのは、おおむね 「現行が影響上限以下」かつ「直す版がある」 ものだ。版が古いだけでは緊急にしない。未認証で悪用されうるか、という前の軸と組み合わせる。断定は照合した時点の出典付きに留める。

XML(サイトマップと、必要ならエクスポート)

XML は用途を分けて使う。

種別主な使いどころ
公開の XML サイトマップログイン前でも、ページ URL のざっくりした一覧と構成が取れる。ページ組み立て系の「更新後に見る範囲」を見積もる材料になる
管理画面のエクスポート XML(コンテンツの書き出し)投稿タイプやページの実データ側の手がかり。公開サイトマップに載らないものや、構成の裏取りに使う

サイトマップは「公開されている URL の地図」であって、無効化済みプラグインや PHP の版までは教えてくれない。逆に Site Health だけでは、更新後にどの画面を目視すべきかの範囲は弱い。版の正本は Site Health、確認範囲の地図は XML、という役割分担にしている。

版一覧が空のまま、推測で埋めない

素材(いま入っている本体・PHP・部品の版)が揃っていないとき、推測で「たぶんこの版」と埋めない。

分けるとよい。

取れる経路
公開面の実測で補える範囲公開 HTML や応答ヘッダから分かる範囲、公開されているジェネレータ情報、XML サイトマップなど(取れるものだけ)
管理画面やサーバー情報が要る範囲サイトヘルス(Site Health)の情報、プラグインの正確な版、無効化済みの部品、PHP の実バージョン、コンテンツのエクスポート XML

取れないものは「未確認」と書く。空欄を埋めたつもりになると、優先度も見積もずれる。Site Health も XML も無いときは、この表どおり公開面で取れる範囲と未確認を分けたまま進める。

最初に切るのは「緊急」と「土台」

相談が来たら、いきなりプラグインの更新リストを埋めない。先に次の2点を見る。

  1. 緊急対応の要否 — いま公開面で悪用されうる状態か。あとからまとめてよい更新なのか。
  2. 本体と PHP が新しいか — WordPress コアとサーバー側の PHP。ここが古いと、部品だけ新しくしても土台の穴が残る。

残りは、部品側の古いまま残っている更新として扱う。件数が多いほど「全部すぐ更新」と言いたくなるが、土台と緊急の切り分けがないと優先順位が崩れやすい。

優先度の軸は「未認証で悪用されうるか」

脆弱性の説明には、権限の前提が書いてあることが多い。よしあきが最初に見るのは、おおむね次の軸である。

  • ログインなしで悪用されうるか(未認証)
  • 悪用に 管理者や投稿者などの権限 が要るか

低権限や、すでにログインしたユーザーが前提の弱点は、次のような運用なら現実リスクを下げて考えてよいことが多い。

  • 管理ユーザーがほぼ1名
  • 新規登録が無効
  • 不要な権限を持つアカウントがいない

「脆弱性がある=即緊急」ではない。悪用の前提が今のサイトに揃っているかを見る。

同型サイトでも、版が1つ違えば判定は別物

見た目や構成が似たサイトでも、導入している部品の版が1つ違うだけで該当件数は変わる。他サイトで作った「このプラグインは危ない/大丈夫」表を流用しない。

毎回、そのサイトの実際の版に当て直す。似ているから同じ、は省略になる。

バックアップ用の部品も、用途名だけで後回しにしない

バックアップや移行のための部品は、「守る側の道具」に見える。だから更新候補の末尾に回りがちだ。

ただ、その部品自体が古いと、守る道具が穴になりうる。用途の印象だけで後回しにせず、他の部品と同じ軸(未認証で悪用されうるか、版がどれだけ遅れているか)で並べる。

ページ組み立て系は、更新より「確認の重さ」

ページビルダーや、ページの見た目を大きく握る部品は、更新そのものより更新後の表示確認が工数を左右しやすい。

  • トップや主要下層の見た目崩れ
  • 編集画面と公開面の差
  • キャッシュや最適化との組み合わせ

「更新ボタンを押す時間」だけで見積もると足りない。確認範囲を先に見積に含める。XML サイトマップは、その範囲を見積もる材料になる。

専門語のまま渡さず、必要性を言い切る

公表されている注意点(アドバイザリや脆弱性情報)を、そのまま専門語で渡しても必要性が伝わりにくいことがある。よしあきは、読者や依頼者向けには、起きうることを次のように言い切るようにしている。

ログインなしで呼べる窓口から、内容が書き換えられうる。

細部の CVE 番号や CVSS の数値は根拠として残してよい。ただ、判断を求める相手には何が起きうるかを先に置く。

調査結果は、そのまま見積の根拠になる

調査で出した優先度と作業量は、見積の材料になる。読み手が迷わない型は次のような形である。

  • 単発で片付ける枠と、継続(定期の版確認・小さな更新)の枠を先に共有する
  • サイト固有の重い確認(ページ組み立て系の表示確認、独自改修の有無など)だけを差額で示す

「全部まとめていくら」より、共通枠と固有分が分かれているほうが、次の相談でも説明を再利用しやすい。

知る仕組み(どこから脆弱性情報を拾うか)と、相談を受けてからの切り分けは別の話になる。前者を整えても、後者の順番が無いと「全部更新」か「様子見」かの両極端に寄りやすい。よしあきは、相談の入口ではこの順番を先に固定するようにしている。