WordPressの「外観→テーマ」に、何年も使っていないテーマが残っていませんか?
有効化していないから安全だと思い、そのまま放置している方は少なくありません。
結論から言うと、未使用テーマはすぐ削除するのではなく、依存関係と改ざんの有無を確認し、証拠を残してから整理するのが安全です。
不審なPHPが潜んでいる場合、先に消すと侵入経路や同時期の被害を追えなくなります。
WordPressの復旧を多数手がけてきたよこやま良平です。わたしの現場経験をもとに、未使用テーマを調査し、安全に隔離・削除・復旧する順番を解説します。
- 未使用テーマがバックドアの隠し場所になり得る理由
- 削除前に確認する有効テーマ・親テーマ・子テーマの関係
- 公式配布物と比較して不審ファイルを見分ける方法
- 証拠を失わずに隔離・削除・復旧する手順
- テーマ以外の再感染経路まで確認するポイント
「無効だから実行されない」と「サーバー上に危険なPHPが存在しない」は別の話です。
この記事では、未使用テーマだけを犯人と決めつけず、正常なテーマを壊さない調査順を示します。
WordPressの未使用テーマにバックドアが潜む理由
WordPressの未使用テーマは、通常のページ表示では有効テーマのように読み込まれません。
しかし、サーバー上のファイルが消えるわけではないため、攻撃後の隠し場所や再侵入用ファイルの置き場になることがあります。

無効化と削除は同じ状態ではない
テーマを無効化しても、wp-content/themes/テーマ名/のフォルダとPHP、CSS、画像は残ります。
WordPress公式も、テーマはテンプレートだけでなく必要なコードファイルを含む仕組みだと説明しています。

通常のフロント表示で未使用テーマのfunctions.phpが自動実行されるわけではありません。
一方、不正PHPが直接アクセス可能な形で置かれたり、別の改ざんコードから読み込まれたりすれば、テーマが無効でも危険性は残ります。
普段見ないフォルダは不正ファイルが見逃されやすい
管理者は有効テーマの外観や更新通知には気づきやすい一方、古いテーマの中身までは日常的に確認しません。
攻撃者にとって、使われていないフォルダは異常が表面化しにくい場所です。
正規ファイルに似た名前や、画像・キャッシュ・ライセンス関連に見える名前でPHPを追加されると、一覧だけでは判別しにくくなります。
更新日時も偽装できるため、「古い日付だから安全」「新しい日付だから感染」とは決められません。
古いテーマ自体が侵入口とは限らない
未使用テーマ内でバックドアを見つけても、そのテーマの脆弱性が最初の侵入口だったとは限りません。
盗まれた管理者情報、脆弱なプラグイン、別サイト、FTP、サーバー設定から侵入し、あとからテーマ内へ置かれた可能性もあります。
つまり、テーマフォルダだけを消しても、設置元が残っていれば再生成されます。
削除は必要な工程ですが、侵入経路の停止と感染範囲の確認を同時に進める必要があります。
WordPressの未使用テーマを削除する前に依存関係を確認
未使用テーマを安全に整理する第一歩は、本当に使われていないかを確認することです。
画面上で「有効」と表示されていなくても、親テーマ、子テーマ、障害時の切り替え先として必要な場合があります。
有効テーマと親テーマ・子テーマを特定する
子テーマを使っているサイトでは、親テーマが無効に見えても削除してはいけません。
子テーマのstyle.cssにあるTemplate欄と、管理画面のテーマ詳細を照合してください。
マルチサイトでは、ネットワークで利用許可されたテーマと各サイトの有効テーマが異なることがあります。
一つのサイトだけを見て不要と決めず、ネットワーク管理画面と全サイトの利用状況を確認します。
- 現在有効なテーマ
- 有効な子テーマが参照している親テーマ
- 復旧時に使う、更新済みの信頼できる標準テーマ1つ
- 検証中で、所有者と用途が確認できているテーマ
WP-CLIと管理画面の一覧を照合する
管理画面へ入れるなら「外観→テーマ」で名称、有効状態、更新の有無を記録します。
WP-CLIを使える環境では、一覧をテキスト保存すると、作業前後の差を比較しやすくなります。
wp theme list --fields=name,status,update,version,auto_update --format=table
wp option get stylesheet
wp option get templatestylesheetは通常、現在のテーマまたは子テーマを示し、templateは親テーマ側を示します。
結果が違う場合は子テーマ構成の可能性があるため、片方だけを削除しないでください。
証拠用バックアップと復旧用バックアップを分ける
調査前のファイル一式、データベース、アクセスログ、管理画面のテーマ一覧を保存します。
感染が疑われる状態のコピーは、正常時へ戻すバックアップではなく、調査証拠として明確に分けて保管してください。
テーマフォルダは、パス、所有者、権限、更新日時、ファイルサイズ、ハッシュ値を残します。
圧縮する場合も、公開領域の中へバックアップZIPを置かず、外部からアクセスできない場所へ移します。
- 有効テーマと親子関係を確認していない
- バックアップやサーバーログを保存していない
- 同じアカウント内の別サイトを確認していない
- 不審ファイルをブラウザやPHPで実行しようとしている
- 復旧後に戻す正規テーマを用意していない
WordPressの未使用テーマでバックドアを調べる手順
未使用テーマの調査は、ファイル名の印象ではなく、由来、正規版との差分、コードの役割、ログの順で進めます。
一つの難読化関数があるだけで感染と決めず、複数の根拠を組み合わせることが重要です。
配布元・テーマ名・バージョンを確認する
まずstyle.cssのテーマ名、バージョン、作者、配布元と、購入履歴や制作会社の記録を照合します。
WordPress公式ディレクトリ、正規販売元、信頼できる制作者以外から入手したテーマは、出所確認を優先してください。
有料テーマを無断配布した「nulled theme」は、最初から不正コードが混ぜられている危険があります。
公式のWordPressセキュリティ文書も、テーマやプラグインはWordPress.orgまたは信頼できる提供元から入手するよう案内しています。

同じバージョンの正規配布物とファイル単位で比較する
テーマ名が正規でも、中身まで正規とは限りません。
同じバージョンのZIPを正規提供元から別環境へ取得し、ファイル一覧、サイズ、ハッシュ、差分を比較します。
比較対象のバージョンが違うと、正常な更新差分まで改ざんに見えます。
バージョンをそろえられない場合は、追加されたPHP、テーマの用途と無関係な処理、外部通信先を優先して確認してください。
find /path/to/wp-content/themes/theme-name -type f -print
find /path/to/wp-content/themes/theme-name -type f -exec shasum -a 256 {} \;
find /path/to/wp-content/themes/theme-name -type f -exec stat {} \;コマンドは読み取り用の例です。
実際のパスへ置き換え、出力先に秘密情報や顧客情報が含まれないよう保管場所と共有範囲を管理してください。
コードは単語ではなく処理の組み合わせで見る
eval、base64_decode、gzinflate、動的な関数呼び出しは調査の手掛かりになります。
ただし、圧縮済みライブラリや正規機能でも似た処理が使われるため、単語だけで削除対象にしてはいけません。
外部入力を受けて任意コードを実行する、認証なしでファイルを書き込む、遠隔サーバーから命令を取得する処理は危険度が高い兆候です。
不審コードは実行せず、文字列、条件分岐、通信先、書き込み先を静的に確認します。
直接アクセスとアクセスログを時系列で照合する
未使用テーマのPHPへ外部から繰り返しアクセスされていないか、Webサーバーのアクセスログを確認します。
POST要求、不自然なクエリ、成功応答、同じ接続元からの管理画面アクセスがあれば、ファイルの役割を考える重要な材料です。
確認のために不審URLへ自分でアクセスすると、コードを動かす恐れがあります。
ブラウザで開くのではなく、保存済みログと静的なファイル調査を中心に進めてください。
- 正規配布物に存在しないPHPや不自然な差分がある
- テーマ機能と無関係な認証回避・書き込み・外部通信がある
- 該当ファイルへの不審なPOSTや成功応答がログにある
- 同時刻に管理者、Cron、別サイト、設定も変更されている
- 隔離後に同じファイルが自動で再生成される
WordPressの未使用テーマを安全に隔離・削除・復旧
調査で不要または不審と判断したテーマは、いきなり完全削除せず、証拠保全、隔離、動作確認、削除の順で処理します。
この順番なら、正常機能を止めた場合も戻せて、再生成の有無も確認できます。

公開領域外へ証拠コピーを保存する
対象フォルダのコピーとハッシュ一覧、テーマ一覧、ログ、調査メモを一組にします。
保存先はWebから開けない場所を選び、感染疑いのファイルを業務用PCで実行できないよう扱ってください。
保全したコピーには、取得日時、元の絶対パス、サイト名、取得者、取得方法を記録します。
複数サイトが同じサーバーにある場合は、どのWordPressのファイルか分かる名前にします。
無効テーマだけを隔離して影響を確認する
有効テーマ、必要な親テーマ、確認済みの復旧用テーマを除き、対象テーマを一つずつ隔離します。
管理画面で削除する前に、フォルダ名変更や公開領域外への移動で停止し、サイトと管理画面の挙動を確認する方法があります。
テーマをまとめて移動すると、どれが機能依存だったか分からなくなります。
一つ処理するたびに、トップページ、固定ページ、投稿、フォーム、ログイン、更新画面、予約処理を確認してください。
正規テーマが必要なら信頼できる配布物から入れ直す
今後も使う可能性があるテーマは、疑わしいフォルダを上書きして済ませず、隔離後に正規配布物を新しいフォルダへ展開します。
独自カスタマイズは、感染疑いのファイルを丸ごと戻さず、必要な差分だけをレビューして移してください。
子テーマの変更も同様です。
正常なバックアップ、バージョン管理、制作記録と比較し、由来が説明できないPHPやJavaScriptを新しい環境へ持ち込まないようにします。
削除後に再生成されないことを確認する
隔離または削除後は、同名フォルダや不審PHPが戻らないか監視します。
戻る場合は、別のバックドア、Cron、管理者セッション、外部デプロイ、サーバー内の別サイトなどが設置元として残っています。
表示が直ったことだけで完了にせず、少なくとも作業直後と時間を空けた再確認を行います。
更新日時だけでなく、ハッシュ、ログ、外部通信、ファイル作成イベントを合わせて見てください。
WordPressの未使用テーマ以外に残る再感染経路を確認
未使用テーマからバックドアが見つかった場合、テーマだけの局所問題として終わらせてはいけません。
攻撃者がテーマへ書き込めた経路と、同じ権限で触れられる範囲を調査します。
WordPress本体・プラグイン・mu-pluginsを調べる
WordPressコアは公式チェックサムや正規ファイルと比較し、追加・変更されたPHPを確認します。
通常プラグインだけでなく、管理画面の標準一覧で目立ちにくいmu-pluginsやドロップインも対象です。
停止中プラグインや古いバックアップフォルダも、サーバー上にPHPが残っていれば調査対象になります。
拡張機能を有効・無効だけで分類せず、公開領域に存在する実行可能ファイルとして棚卸ししてください。
管理者・セッション・認証情報を失効する
身に覚えのない管理者、権限変更、Application Passwords、APIキー、FTP・SSHアカウントを確認します。
パスワード変更は、感染した端末や漏えいした経路を止めてから、安全な端末と通信で行います。
WordPressの認証キーとソルトを更新すると、既存ログインセッションを失効できます。
ただし、DB情報、サーバー管理、メール、DNS、外部サービスの資格情報は別管理なので、それぞれ影響と変更順を決めてください。
Cron・データベース・uploads・サーバー設定を見る
不審なWP-CronやAction Scheduler、サーバー側Cron、データベースの不正オプション、投稿スパムを確認します。uploads内のPHP、.user.ini、.htaccess、wp-config.phpも、テーマ以外の永続化に使われる場所です。
同じホスティング契約に別のWordPressや古いCMSがある場合、そちらから再感染する可能性もあります。
一つのサイトだけをきれいにしても、共有アカウント全体に不審ファイルが残れば安全とは言えません。
- WordPressコア、通常プラグイン、mu-plugins、ドロップイン
- 管理者、セッション、Application Passwords、APIキー
- WP-Cron、Action Scheduler、サーバー側Cron
- データベース、uploads、.user.ini、.htaccess、wp-config.php
- 同じ契約内の別WordPress、古いCMS、メール、DNS
侵入口を閉じてから更新と防御を戻す
感染ファイルの除去後は、WordPress本体、テーマ、プラグイン、PHPを対応する安全な版へ更新します。
不要な管理者と拡張を削除し、最小権限、二要素認証、WAF、バックアップ、監視を再設定してください。
防御プラグインを追加するだけで、既存バックドアが自動的に消えるわけではありません。
まず感染を調査・駆除し、その後に不正ログインや再侵入を減らす運用へ移します。
WordPressの未使用テーマ処理後に復旧を検証
未使用テーマを整理した後は、サイトが表示されるだけでなく、感染が止まり、正規機能が維持されていることを検証します。
作業前に決めた確認項目と比較し、証拠を残して完了判断を行います。
PC・スマホ・ログイン・フォームを確認する
PCとスマホでトップ、主要ページ、投稿、404、検索、問い合わせフォームを確認します。
管理画面ではログイン、投稿編集、メディア、更新、テーマ画面が正常に動くかを見ます。
検索経由や特定端末だけで不正転送が出る感染もあるため、通常アクセスだけで判断しません。
検索結果、外部リンク、未ログイン状態、異なるブラウザでも症状が戻らないか確認してください。
ファイル・ログ・外部警告の再発を確認する
隔離したテーマや不審PHPの再生成、同じ接続元からのアクセス、未知の管理者作成、Cron再登録を監視します。
Google Search Console、セーフブラウジング、広告審査、サーバー会社の検出通知があった場合は、それぞれ解除条件も確認します。
復旧直後の一回だけでなく、時間を空けて再確認することが重要です。
定期スキャンや差分監視は補助として使い、正常状態の基準とログ保管期間を決めてください。
正常確認後に新しいバックアップを作る
復旧前の感染疑いバックアップと、復旧後に検証した正常バックアップを混ぜないでください。
正常版には取得日時、WordPress・PHP・テーマ・プラグインの版、検証結果を記録します。
復元テストができる環境なら、別環境でバックアップから戻せるかも確認します。
バックアップは存在するだけでなく、必要な時に安全に復元できて初めて役に立ちます。
WordPressの未使用テーマとバックドアのよくある質問
WordPressの未使用テーマは証拠保全後に安全に整理
WordPressの未使用テーマは、有効化されていないだけで、サーバーから消えたわけではありません。
不審ファイルが隠れている可能性を考え、まず親子関係、配布元、正規版との差分、アクセスログを確認してください。
バックドアが見つかったら、テーマだけを消して終わりにせず、管理者、プラグイン、Cron、データベース、サーバー内の別サイトまで調べます。
設置元と侵入口を閉じ、再生成がないことを確認して初めて復旧と判断できます。
自分で正規・不正を判断できない場合や、複数サイトへ広がっている場合は、むやみに削除を続けないでください。
証拠と復元手段を残した段階で専門家へ相談する方が、被害と停止時間を抑えやすくなります。
未使用テーマのバックドアを自分で判断できない時は

未使用テーマの不審ファイル、バックドア、再感染でお困りなら、
クイックレスキューが感染範囲を調査し、安全な復旧を支援します。
- 未使用テーマのPHPが正規ファイルか判断できない
- 削除しても不審ファイルやフォルダが戻ってくる
- 親テーマ・子テーマの関係が分からず消せない
- 同じサーバーの別サイトにも感染が広がっている
- 証拠を残しながら安全に駆除・復旧したい
- 万一復旧できない場合やマルウェア駆除できない場合は全額返金保証で安心
- 90日間再感染保証・動作保証で安心
- 初期費用・調査費用0円で安心






