テクノロジー

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

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

ユーザー

admin を使わない。推測しにくいログイン名

パスワードと 2FA

ユーザー / プラグイン

使い回し禁止。管理者は 2FA 必須

ログイン URL

プラグイン等

変更は補助。2FA と試行制限が本体

ファイル編集

wp-config.php

DISALLOW_FILE_EDIT を true

管理画面 HTTPS

wp-config.php / サーバー

FORCE_SSL_ADMIN と証明書

ジェネレータ非表示

functions.php

wp_generator を外す(補助)

XML-RPC

functions.php

未使用なら無効。利用サービスを先に確認

REST API

functions.php

未ログイン制限は Gutenberg 影響を確認してから

PHP バージョン

サーバー

サポート中の PHP。ホストの案内に従う

本体・プラグイン更新

管理画面 / ステージング

確認環境を経て本番。放置しない

不要プラグイン

管理画面

停止だけでなく削除

権限

ユーザー

最小権限。退職者は即削除

バックアップ

ホスト + 外部

サーバー内だけにしない。リストア手順を書く

セキュリティプラグイン

プラグイン

SiteGuard / Wordfence 等は補助。過信しない

監視

Search Console / ホスト

改ざん警告と証明書期限

ログイン試行

プラグイン / WAF

連続失敗を制限する

テーマ

管理画面

子テーマ。停止済みテーマを残しすぎない

まとめ:セキュリティは、納品日で終わらない

WordPress の安全は、公開前の設定一覧ではなく、更新と権限とバックアップが翌月も回っている状態です。構築時の硬化は、その運用を楽にするための初期値です。放置は「何もしていない」のではなく、公開された入口を、修正されないまま貸し続けていることに近いです。

  • 狙われる主因は知名度より、未更新と弱い認証
  • 契約に保守と事故時の範囲を書く
  • 実装はファイル編集禁止、2FA、不要機能の停止が先。隠蔽は補助
  • 運用はステージング更新、外部バックアップ、最小権限
  • セキュリティプラグインは層の一つであり、本体ではない

既存サイトなら、まず管理者ユーザー数、最後の更新日、バックアップの所在、2FA の有無だけ見てください。診断と称して侵入テストの手順はここでは扱いません。公開面の設定と運用の穴を先に閉じます。

WordPress の更新代行、安全寄りの初期設定、既存サイトの点検方針は、相談・お問い合わせからどうぞ。改ざん済みで緊急の場合は、その旨を先に書いてください。できる範囲と、専門対応が必要な範囲を分けて返します。