サイバーセキュリティをテーマにした高品質なエディトリアルイラスト。暗いサーバールームの中、WordPressサイトを象徴するウェブサーバーから、巨大な圧縮バックアップアーカイブファイルが無防備に外部へ流出し、光るURLの経路を通って不審なダウンロード矢印へつながっている構図。アーカイブの内部には、ウェブサイトのデータベース、ユーザー情報、画像、テーマ、プラグイン設定を抽象的なアイコンとして表現し、個人情報とAPIキーを含む「サイト丸ごとのバックアップ」である危険性を示す。手前には管理者がターミナル画面でサーバー内を安全に棚卸ししている様子、複数サイトのバックアップを件数・容量ごとに整理する視覚的な要素、不要なファイルを隔離・削除する安全な運用を連想させるシールドとチェックマーク。緊張感のある赤い警告光と、適切な管理を示す青緑色のセキュリティ光を対比。現実的で洗練されたテック系雑誌の表紙風、 cinematic lighting、深い青と黒を基調にした配色、写実的な3Dイラスト、高いディテール、余白のある構図。画面上の文字、コード、URL、ロゴ、ブランド名、判読可能な記号は一切入れない。

All-in-One WP Migration の .wpress、放置していませんか? サーバー上のバックアップを棚卸しする check-wpress.sh を公開しました


All-in-One WP Migration で作ったバックアップファイル(.wpress)を、サーバー上に置いたままにしていないでしょうか。ファイル名さえ分かれば、誰でも URL から直接ダウンロードできてしまう状態になっていることがあります。

そこで Webの相談所では、サーバー上の .wpress を探し出して「どのサイトに・何件・どれくらいの容量」残っているかを一覧にするシェルスクリプト check-wpress.sh を作成し、GitHub で公開しました。この記事では、何が危ないのかと、スクリプトの使い方をご紹介します。

.wpress は「サイト丸ごと」のバックアップ

.wpress は、All-in-One WP Migration がエクスポートやバックアップのときに作るファイルです。サーバー上では wp-content/ai1wm-backups/ に保存され、ファイル名は「ドメイン名-年月日-時刻-ランダムな文字列」の形で自動的に付けられます(例:example-com-20260813-122112-k3x9q2m7v4wd.wpress)。

中にはテーマ・プラグイン・アップロード画像に加えて、データベースのダンプがまとめて入っています。つまり次のような情報が、ひとつのファイルに詰まっています。

  • 管理者を含むユーザー情報(メールアドレス、パスワードのハッシュ)
  • お問い合わせフォームの送信履歴や会員情報など、利用者の個人情報
  • プラグインの設定値や API キーなど、サイトの内部情報

サイトの引っ越しや一時的な退避には便利ですが、作ったまま放置されやすいファイルでもあります。

.htaccess は「一覧表示」を止めるだけ

ai1wm-backups フォルダには、プラグインが .htaccess と index.php を自動で置いてくれます。これで「守られている」と思われがちですが、止めているのはディレクトリの一覧表示だけです。

フォルダの中身を一覧で見られなくても、ファイル名が分かれば次のような URL を直接開くことでダウンロードできてしまいます。

https://example.com/wp-content/ai1wm-backups/example-com-20260813-122112-k3x9q2m7v4wd.wpress

ファイル名の末尾にはランダムな文字列が付くため、当てずっぽうで URL を探り当てるのは簡単ではありません。ただし、ドメイン名と日時の部分は推測でき、守りになっているのはランダムな部分だけです。作業メモやチャット、メールに貼ったリンク、検索エンジンのキャッシュなどから URL そのものが漏れることもあります。「見えないから大丈夫」ではなく、不要なものはサーバーに置かないのが一番確実な対策です。

check-wpress.sh でできること

check-wpress.sh は、指定したディレクトリ以下の .wpress を探して、サイトごとに棚卸しするスクリプトです。これまで公開してきたログ調査スクリプトと同じく、wp-security-audit-on-jp-hosting リポジトリに追加しました(コミット)。

  • 既定は読み取り専用:何も消さずに、一覧と集計だけを表示します
  • サイト単位でまとめる:.wpress が置かれた WordPress を特定し、サイトごとに件数・合計サイズ・最終更新日時を表示します
  • 公開 URL を併記:WP-CLI が使える環境では、サイトの URL を取得して各ファイルのダウンロード URL を表示します。「この URL で落とせてしまう」ことが具体的に分かります
  • ドメイン別の集計:件数の多い順に並べ、最後に合計件数と容量を表示します
  • 確認付きの削除:--delete を付けたときだけ、削除リストを出して yes の入力を確認してから削除します

複数サイトを1つのアカウントで運用しているレンタルサーバーでも、ホームディレクトリを指定すれば全サイトをまとめて確認できます。WordPress のルートは wp-load.php を目印に判定しているので、wp-config.php を1つ上の階層に置いている構成でも正しく見分けられます。

使い方

SSH でサーバーにログインし、調べたいディレクトリを引数に指定して実行します。ダウンロードせずに curl から直接実行することもできます。

1. まずは一覧・集計だけ(読み取り専用)

# リポジトリから取得して実行する場合
./check-wpress.sh /home/example

# curl で直接実行する場合
curl -s https://raw.githubusercontent.com/web-soudan/wp-security-audit-on-jp-hosting/main/check-wpress.sh | bash -s -- /home/example

実行すると、次のような形で結果が表示されます(表示例)。

対象:       All-in-One WP Migration のバックアップ (.wpress)
走査対象:   /home/example
--------------------------------------------------
サイト: https://example.com
  WP   : /home/example/www/example.com
  1.2GB       2026-08-13 12:21  /home/example/www/example.com/wp-content/ai1wm-backups/example-com-20260813-122112-k3x9q2m7v4wd.wpress
            └ URL: https://example.com/wp-content/ai1wm-backups/example-com-20260813-122112-k3x9q2m7v4wd.wpress
  小計: 1 件 / 1.2GB
--------------------------------------------------
ドメイン別の .wpress
     1 件  1.2GB       https://example.com

合計: 1 件 / 1.2GB

「└ URL:」の行が、ファイル名さえ分かればダウンロードできてしまう URL です。WP-CLI がない環境では URL の代わりに WordPress のパスが表示されます。

2. 不要なものを削除する

./check-wpress.sh /home/example --delete

削除リストが表示され、yes と入力したときだけ削除します。それ以外の入力では何も消さずに終了します。

cron などの非対話環境で削除したい場合は --yes も付けてください。--delete だけを非対話で実行した場合は、誤って消さないようエラーで止まる作りにしています。

オプション内容
(なし)一覧と集計のみ。何も変更しません
--delete一覧を表示したうえで、確認して .wpress を削除
--yes / -y--delete の確認を省略(非対話実行用)
-h / --help使い方を表示

削除するときの注意点

削除したファイルは元に戻せません。必要なバックアップは、先に手元にダウンロードしてから削除してください。

スクリプト側でも、消しすぎないように次の配慮をしています。

  • 削除するのは .wpress ファイルだけです。ai1wm-backups 内の .htaccess や index.php はプラグインの動作に必要なため残します
  • シンボリックリンクはスキップし、実体のファイルだけを対象にします
  • 権限不足などで消せなかったファイルは、警告として件数とパスを表示します

また、削除しても運用が変わらなければ、また同じ場所にバックアップが溜まっていきます。あわせて次の点も見直すことをおすすめします。

  • 移行作業が終わったら、その場で .wpress を削除する手順にする
  • 定期バックアップは、サーバーの公開ディレクトリ以外(外部ストレージなど)に保存する仕組みにする
  • 使わなくなった All-in-One WP Migration は停止・削除する
  • このスクリプトを定期的に実行して、残っていないかを確認する

まとめ

.wpress はサイトの中身と個人情報をまるごと含むファイルで、.htaccess があってもファイル名が分かればダウンロードできてしまいます。移行やバックアップで一度でも All-in-One WP Migration を使ったことがあるサイトは、ぜひ check-wpress.sh で残っていないか確認してみてください。既定では何も消さないので、まずは気軽に一覧を出すところから始められます。

スクリプトは GitHub で公開しています。不具合や改善のご提案は Issue や Pull Request でお寄せください。

「SSH の使い方が分からない」「どれを消してよいか判断できない」「バックアップの運用ごと見直したい」といった場合は、Webの相談所までお気軽にご相談ください。WordPress の保守・セキュリティ対策の一環としてお手伝いします。