WordPressの不要テーマ・プラグインを削除する|脆弱性を持つ攻撃対象の削減

当ページは検証・整備中のドラフトです。
内容は実環境での検証や追加調査により変更される予定です。
参照:ページ公開・更新ポリシー

WordPressでは、テーマやプラグインを追加することで機能を拡張できる。一方、それぞれにPHPやJavaScriptなどのコードが含まれ、脆弱性管理の対象にもなる。

現在使用していないものまで残せば、更新や脆弱性情報を確認する対象が増える。不要になったテーマやプラグインは削除し、WordPressを必要な構成要素だけに保つ。

有効化・無効化・削除の違い

テーマやプラグインは、無効化しただけでは通常サーバから削除されない。

状態コードWordPressでの利用セキュリティ上の考え方
有効化残る通常処理で利用される更新や脆弱性管理が必要
無効化・未使用残る通常処理から外れる攻撃経路が減る場合はあるが、管理対象には残る
削除取り除かれる利用されないそのコードを攻撃対象から外せる

無効化すると、プラグインの通常の初期化処理や機能は基本的に実行されなくなる。そのため、有効化中と無効化中のリスクが同じというわけではない。

ただし、ファイル自体はサーバ上に残る。脆弱性の種類によっては、特定ファイルへの直接アクセスなど、有効化されていなくても悪用できる場合がある。

無効化は機能を止める操作、削除は不要なコードそのものを取り除く操作として区別する。

無効化したテーマ・プラグインの隔離

WordPress標準には、無効化したテーマやプラグインを隔離領域へ移して保管する機能はない。無効化してもファイルはサーバ上に残るため、一時的な停止ではなく不要と判断したものは削除を基本とする。

Webサーバ側のアクセス制御やWeb公開領域外への移動によって隔離する方法もあるが、通常のWordPress管理より複雑になる。

再入手できるものであれば、長期間隔離して保管するより、必要になった時点で再導入する方が小規模環境では管理しやすい。

一時的な無効化と削除の使い分け

無効化そのものは、WordPressの運用に必要な機能である。
例えば、次のような場面では無効化が適している。

  • 不具合の原因を切り分ける
  • 設定変更のため一時的に停止する
  • 別のプラグインやテーマへ移行する
  • 更新前後の動作を比較する
  • 短期間だけ機能を停止する

一方、今後使用する予定がないものを「いつか使うかもしれない」という理由だけで残しておけば、その間も管理対象から外れない。

基本的な判断は次のようになる。

  • 一時的に使用しない → 無効化
  • 今後使用する予定がない → 削除

削除するテーマ・プラグインを確認する

WordPress管理画面から、インストールしているテーマとプラグインを確認し、削除候補となるものをピックアップ

  • 試用のためにインストールしたもの
  • 別のテーマ・プラグインへ移行済みのもの
  • 現在使用していないもの
  • 他の機能と重複しているもの
  • 今後利用する予定がないもの

ただし、無効化されているものを一律に削除はしない。見た目上は使用されていなくても、サイトに必要なものがある。

削除してはいけないものを確認する

子テーマが使用する親テーマ

子テーマを使用している場合、その親テーマも必要である。

WordPress上では子テーマが有効になっているため、親テーマは未使用に見える。しかし、子テーマは親テーマのファイルや機能を利用して動作する。

テーマを整理するときは、有効・無効だけでなく親子関係も確認する。

フォールバック用のWordPress標準テーマ

WordPressのSite Healthでは、現在のテーマに問題が発生した場合に利用できるデフォルトテーマの存在も確認対象となっている。

そのため、使用中のテーマとは別に、フォールバック可能なWordPress標準テーマを残しておく。

一方、複数世代の標準テーマを保管する必要はない。AFLでは管理対象を増やさない観点から、予備の標準テーマは1つに絞る

古くなってサポートが終了した場合や、使用中のWordPressとの互換性に問題が生じた場合は、その時点の新しい標準テーマへ入れ替える。

テーマは基本的に次の構成に整理できる。

使用中のテーマ
+
必要な親テーマ
+
予備のWordPress標準テーマ 1つ

用途を確認できないもの

用途が分からないテーマやプラグインを、不要と推測して削除するのも避けたい。

特にプラグインは、画面上では目立たなくても、フォーム、バックアップ、キャッシュ、セキュリティ、外部サービスとの連携などを担っていることがある。

用途を確認し、サイトの動作に必要ないと判断してから削除する。

削除前に再入手できるか確認する

WordPress公式ディレクトリや開発元から再インストールできるものなら、「将来使うかもしれない」という理由だけでサーバ上に残しておく必要性は低い。

一方、次のようなものは削除前に再入手方法を確認しておく。

  • 配布や販売が終了している
  • 有料ライセンスが必要
  • 独自にカスタマイズしている
  • 開発元から個別に提供されたもの
  • 再設定に必要な情報を保存していない

必要になった場合に再導入できることを確認した上で削除すれば、不要なコードを保管し続ける理由を減らせる。

不要なテーマ・プラグインを削除する

不要なプラグインを削除する

WordPress管理画面の「プラグイン」から削除対象を確認する。

有効化されているプラグインを削除する場合は、まず無効化してサイトへの影響を確認する。その後、不要と判断できれば削除する。

必要なプラグインに既知の脆弱性がある場合は、削除だけでなく更新や代替も選択肢となる。脆弱性の確認と対応は、別ユニット「WordPressプラグインの脆弱性を確認・解消する」で扱う。

不要なテーマを削除する

WordPress管理画面の「外観」から、インストール済みテーマを確認する。

使用中のテーマ、必要な親テーマ、フォールバック用のWordPress標準テーマを除き、不要と判断したものを削除する。

必要なテーマの脆弱性については、別ユニット「WordPressテーマの脆弱性を確認・解消する」で確認する。

削除後に残るデータ

テーマやプラグインを削除しても、それまでに作成されたデータまで必ず消えるとは限らない。

特にプラグインでは、削除後も次のようなデータが残ることがある。

  • 設定値
  • 独自のデータベーステーブル
  • アップロードしたファイル
  • ログやキャッシュ
  • 作成したコンテンツ

したがって、プラグインの削除と関連データの完全消去は別の処理として考える。

このユニットでの主目的は、不要なテーマやプラグインの実行可能なコードをWordPress環境から取り除くことにある。残存データまで整理する必要がある場合は、そのテーマやプラグインの仕様を確認して個別に対応する。

必要なテーマ・プラグインだけを残す

テーマやプラグインは、少ないほど安全という単純なものではない。必要な機能まで削除すれば、サイトの運用に支障が出る。

重要なのは、必要なものと不要なものを区別することである。

必要なものは更新や脆弱性管理を続け、不要になったものは削除する。新しいテーマやプラグインを試した場合も、不採用となったものをそのまま残さない。

テーマ・プラグインを確認
        ↓
現在または一時的に必要か
     ↓              ↓
    必要            不要
     ↓              ↓
維持・脆弱性管理   再入手方法などを確認
                    ↓
                   削除

無効化したまま長期間保管するものを減らせば、脆弱性を持ち得るコードだけでなく、更新や脆弱性情報を追跡する管理対象も減らせる。

必要なコードは維持して管理し、不要なコードはWordPress環境から取り除く。 これを基本として、WordPressの構成を必要なものだけに保つ。