WordPressサイトを放置すると危険?2026年版・企業サイトの最低限セキュリティ対策と保守設計

納品して数か月、本体もプラグインも止まったままの WordPress は、珍しくありません。「うちは小さいから狙われない」と思っている間に、管理画面へのログイン試行は毎日届きます。2026年時点でも、攻撃の多くは人手の狙い撃ちより、公開された CMS を広く探す自動処理です。作って終わりにすると、自社サイトが壊れるだけでなく、別のサイトへ誘導する踏み台に使われることがあります。
セキュリティは、事故が起きてから業者を探す作業ではありません。構築時の硬化(hardening)と、更新・バックアップ・権限を回す保守の仕組みを先に決める方が、被害の大半は防げます。これは調査の「8割」ではなく、改ざん対応で時間が溶ける現場を見たうえでの実務の感覚です。ゼロにはなりません。最低限を契約と実装に落とす話です。
この記事では、フリーランスのWebディレクター兼エンジニアとして、WordPress の企業サイトを構築・運用してきた立場から、着工前から運用までに決めておく項目を整理します。攻撃の手順は書きません。防御側が先に合意すべき範囲と、設定の型だけを残します。
なぜ放置された WordPress は狙われるのか
WordPress は利用者数が多いため、同じ入口をまとめて試される対象になります。規模の小さいコーポレートサイトでも、スキャンの対象からは外れません。
1. プラグイン・テーマの未更新
脆弱性情報が公開されたあと、同じ製品を載せたサイトへ、自動化された確認と侵入試行が続きます。「数分後」と断言はできませんが、対応の猶予を週・月単位で見積もるのは危険です。使っていないプラグインを残すこと自体が、更新漏れの温床になります。本体より、プラグインの未更新が入口になることが多い、と見ておいてください。
2. 管理者アカウントの総当たりと、使い回しパスワード
ログイン画面がインターネットに出ていると、よくあるユーザー名(admin)と弱いパスワードの組み合わせを、機械が繰り返し試します。別サービスから漏れたパスワードを流用する手口(クレデンシャルスタッフィング)も、同じ入口を使います。デフォルトの /wp-admin/ と推測しやすい ID は、試行回数を増やすだけです。隠すことは補助であり、長いパスワードと2要素認証(2FA)の方が効きます。
3. 自社の被害で終わらない二次被害
改ざん後に起きやすいのは、管理画面が使えないことだけではありません。訪問者を別サイトへ飛ばす、迷惑なスクリプトを混入する、送信元としてメールやフォームを悪用する。検索結果で警告が出たり、ブランド検索の信頼が落ちたりします。復旧費用は案件ごとに違うので金額は書きません。営業停止と、説明責任の方が重いことが多いです。
失敗しやすい運用と、先に防御を入れた運用
固有の社名や、確認できない「数十万円」の請求額は出しません。繰り返される型です。
悪い例:何も触っていないのに、別サイトへ飛ばされる
更新を止めたサイトで、広く使われているプラグインの修正版が出たあとも放置する。ある日、トップが海外の勧誘ページへ飛ぶ。Search Console にセキュリティの警告が届き、検索からの流入が細る。バックアップが同じサーバーにしか無く、改ざん前へ戻せない。ここからが長いです。制作会社に「納品後は見ていない」と言われ、費用と責任の話で止まります。
核は高度な攻撃ではなく、更新とバックアップと、事故時の役割が契約に無いことです。
良い例:着工時に層を分け、更新は Staging で試す
本番の前に、同じ構成の確認用環境(ステージング)がある。プラグイン更新はそこで表示とフォームを確認してから本番へ出す。ログインは 2FA、ファイルのテーマ編集は無効、バックアップはサーバーと別の場所に残す。不正ログインの連続は、プラグインやサーバー側のレート制限で止める。無停止を約束はできませんが、公開したまま直す選択が取れます。
【フェーズ・職種別】最低限、提案しておく対策
Webディレクター / 営業:要件定義と契約
納品物に「WordPress」と書いて終わるのではなく、運用の境界を先に書きます。
- 本体・プラグイン・PHP の更新を、誰が、どの頻度で行うか
- バックアップの保管場所と、リストアの演習をするか
- 営業時間外の緊急対応は含まれるか、都度見積もりか
- 改ざん時に、制作側がどこまで調査し、どこから先は専門対応か
- 保守を結ばない場合、更新遅延の結果は発注者の運用責任であることの同意
ミニ事例です。保守無しで納品し、改ざん後に「直して当然」と「当時の見積もりに含まれない」が衝突する型があります。納品時に「セキュリティと保守の範囲」を1枚渡し、月額の更新代行へ切り替えた現場は、事故時の窓口が最初からあります。免責は、何もしない宣言ではありません。やる範囲と、やらない範囲を同じ紙に書くことです。
フロントエンドエンジニア / コーダー:構築時の硬化
ここは「隠す」より、既定の危険な機能を閉じ、認証を厚くするが先です。ログイン URL の変更は、自動試行のノイズを減らす補助です。見つけられない保証にはなりません。
wp-config.php に置く、最低限の例です。テーマやプラグインの画面からの編集を止め、管理画面を HTTPS に寄せます。
<?php
define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('DISALLOW_UNFILTERED_HTML', true);DISALLOW_UNFILTERED_HTML は、管理者以外の HTML 直書きを制限します。運用でカスタム HTML が必要なら、対象ロールを分けて検討してください。
バージョン文字列を head から外す例です。隠蔽は補助で、更新の代替ではありません。
remove_action('wp_head', 'wp_generator');
add_filter('the_generator', '__return_empty_string');XML-RPC は、古い遠隔投稿や一部アプリが使います。使っていなければ閉じます。Jetpack や公式アプリに依存しているサイトでは、先に影響を確認してください。
add_filter('xmlrpc_enabled', '__return_false');REST API を未ログインに対して閉じる例です。Gutenberg(ブロックエディタ)や、REST を使うフォーム・ヘッドレス構成は壊れます。 企業の古典的な企業サイトで、ログインユーザー以外に API を晒したくない場合の選択肢です。全面禁止を既定にしないでください。
add_filter('rest_authentication_errors', function ($result) {
if (true === $result || is_wp_error($result)) {
return $result;
}
if (!is_user_logged_in()) {
return new WP_Error(
'rest_unauthorized',
'REST API is restricted.',
['status' => 401]
);
}
return $result;
});2FA は、WordPress.com アカウント連携や、アプリ型の認証プラグインで入れます。自前で暗号を組まない方が安全です。ログイン試行の制限も、信頼できるプラグインか、サーバー(WAF、fail2ban 相当)に寄せます。
.htaccess で管理画面を会社 IP だけに制限する方法もあります。在宅勤務や代理店が入れなくなるため、VPN か許可 IP の運用ルールとセットです。コード例より、誰がどこから更新するかを先に決めてください。
ミニ事例です。admin / 短いパスワード / ファイル編集 ON のまま公開し、翌日からログイン試行のログが埋まる型があります。2FA と DISALLOW_FILE_EDIT、使わない XML-RPC の停止までを初期化チェックに入れた現場は、同じノイズでも突破されにくいです。
Web担当者 / 運用者:納品後に止めないこと
- 本体・プラグイン・テーマは、ステージングで表示確認してから本番へ
- バックアップは、公開サーバーとは別(オブジェクトストレージや別リージョン)にも残す
- 使っていないプラグインとテーマは削除する(停止だけだとファイルは残る)
- 退職者・終了した制作アカウントは、当日中に削除または無効化
- 全員を「管理者」にしない。日常更新は編集者、公開設定は管理者、と分ける
ミニ事例です。制作・広報・役員が全員管理者で、共有パスワードをチャットに残す。どこか一箇所の漏洩で管理画面が取られる型です。ロールを分け、2FA を必須にした運用は、同じ漏洩でも被害範囲が狭まります。
クライアントは知らない。先に伝えること
「小さい会社だから来ない」は、スキャン側の都合と合いません。攻撃者は会社の知名度ではなく、同じソフトウェアの同じ弱点を探します。
セキュリティプラグインは、補助です。SiteGuard WP Plugin は国内サイトでよく使われ、ログイン通知や画像認証を足せます。Wordfence はファイアウォールとスキャンが一体になった製品です。どちらも、入れた瞬間に更新が不要になるわけではありません。プラグイン自体の更新遅れが入口になることもある、と伝えてください。WAF やサーバー側の PHP バージョンも、同じ層です。プラグイン1本に全部を預けない。
無料プランで十分な範囲と、有料のサポートが要る範囲は、保守見積もりの中で分けます。ここを曖昧にすると、事故後に「入っていたのに」となります。
WordPressセキュリティ初期構築&保守チェックシート
キックオフと納品チェックに貼ります。環境でできない行は、代替(ホストの自動バックアップなど)を書いてください。
チェック項目 | 設定ファイル / 場所 | チェック内容 |
|---|---|---|
保守範囲の合意 | 契約書・申込 | 更新、バックアップ、緊急対応、改ざん時の切り分け |
管理者 ID | ユーザー |
|
パスワードと 2FA | ユーザー / プラグイン | 使い回し禁止。管理者は 2FA 必須 |
ログイン URL | プラグイン等 | 変更は補助。2FA と試行制限が本体 |
ファイル編集 |
|
|
管理画面 HTTPS |
|
|
ジェネレータ非表示 |
|
|
XML-RPC |
| 未使用なら無効。利用サービスを先に確認 |
REST API |
| 未ログイン制限は Gutenberg 影響を確認してから |
PHP バージョン | サーバー | サポート中の PHP。ホストの案内に従う |
本体・プラグイン更新 | 管理画面 / ステージング | 確認環境を経て本番。放置しない |
不要プラグイン | 管理画面 | 停止だけでなく削除 |
権限 | ユーザー | 最小権限。退職者は即削除 |
バックアップ | ホスト + 外部 | サーバー内だけにしない。リストア手順を書く |
セキュリティプラグイン | プラグイン | SiteGuard / Wordfence 等は補助。過信しない |
監視 | Search Console / ホスト | 改ざん警告と証明書期限 |
ログイン試行 | プラグイン / WAF | 連続失敗を制限する |
テーマ | 管理画面 | 子テーマ。停止済みテーマを残しすぎない |
まとめ:セキュリティは、納品日で終わらない
WordPress の安全は、公開前の設定一覧ではなく、更新と権限とバックアップが翌月も回っている状態です。構築時の硬化は、その運用を楽にするための初期値です。放置は「何もしていない」のではなく、公開された入口を、修正されないまま貸し続けていることに近いです。
- 狙われる主因は知名度より、未更新と弱い認証
- 契約に保守と事故時の範囲を書く
- 実装はファイル編集禁止、2FA、不要機能の停止が先。隠蔽は補助
- 運用はステージング更新、外部バックアップ、最小権限
- セキュリティプラグインは層の一つであり、本体ではない
既存サイトなら、まず管理者ユーザー数、最後の更新日、バックアップの所在、2FA の有無だけ見てください。診断と称して侵入テストの手順はここでは扱いません。公開面の設定と運用の穴を先に閉じます。
WordPress の更新代行、安全寄りの初期設定、既存サイトの点検方針は、相談・お問い合わせからどうぞ。改ざん済みで緊急の場合は、その旨を先に書いてください。できる範囲と、専門対応が必要な範囲を分けて返します。