WordPressセキュリティ強化チェックリスト — 乗っ取られる前にやる10項目

バックアップ・障害対策・監視中級
WordPressSecurityWAF2FABackup

本記事はアフィリエイト広告(A8.net)を含みます。価格・仕様は2026年6月時点の目安です。最新は各公式サイトでご確認ください。

TL;DR

WordPressの乗っ取りは「特定のサイトを狙った高度な攻撃」より、自動化されたBotが脆弱なサイトを総当たりで踏み抜くケースが大半を占めます。逆に言えば、基本の10項目を潰しておけば被害確率は大きく下がります。本記事では、本体更新・管理者ユーザー名・2段階認証・wp-login保護・WAF・自動バックアップまで、改ざんされる前にやるべき対策を実務手順で解説します。


なぜWordPressが狙われるのか

WordPressは世界のWebサイトの約4割で使われているとされ(W3Techs調査)、シェアの大きさがそのまま攻撃対象の大きさになっています。攻撃者は1サイトずつ手作業で攻めるのではなく、Botで無数のサイトを巡回し、既知の穴が残っているものを機械的に踏み抜いていきます。

乗っ取られると起きること:

  • 改ざん: トップページにスパムリンクや別サイトへのリダイレクトが埋め込まれ、検索順位とブランドが毀損する
  • マルウェア配布の踏み台化: 訪問者にマルウェアを配るサイトと判定され、Google Safe Browsingでブロックされる
  • スパムメール送信: サーバーが大量送信に使われ、IPがブラックリスト入りしてメール全般が届かなくなる
  • 情報漏洩: 会員データ・問い合わせ内容・決済関連情報が抜かれる

復旧には、クリーンな環境への再構築・全パスワード変更・Google審査の再申請が必要になり、予防にかかる手間とは桁が違うコストが発生します。


チェックリスト全体像

まず全体を俯瞰します。上から順に重要度が高く、①〜④はどのサイトでも必須です。

#対策守るもの難易度
本体・テーマ・プラグインの更新既知脆弱性の悪用
不要プラグイン・テーマの削除攻撃面(attack surface)
管理者ユーザー名をadminにしないブルートフォースの片側
強固なパスワード + 2段階認証不正ログイン
wp-login / xmlrpc の保護総当たり・増幅攻撃
ファイル権限と wp-config 保護設定情報の窃取
WAF(Cloudflare / プラグイン)攻撃の手前での遮断
自動バックアップ復旧手段の確保
SSL / HTTPS化通信の盗聴・改ざん
管理画面のアクセス制限管理面への到達自体

① 本体・テーマ・プラグインを更新する

乗っ取りの最大の入口は「更新されずに放置された既知脆弱性」です。攻撃者は公開済みの脆弱性情報(CVE)を見て、対象バージョンが残っているサイトをBotで探します。更新を当てた瞬間に塞がる穴を、放置したせいで踏まれるのが最も多いパターンです。

  • WordPress本体は自動更新(マイナーバージョン)が既定で有効。メジャーバージョンも管理画面で「自動更新を有効化」しておく
  • プラグイン・テーマも個別に自動更新をONにできる(プラグイン一覧の各行「自動更新を有効化」リンク)
  • 自動更新でレイアウト崩れが怖い場合は、ステージング環境で確認してから本番反映する運用にする

更新放置は最もコストが低く効果が高い対策です。最優先で潰します。


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

「停止中だから安全」は誤りです。停止していてもファイルはサーバー上に残り、脆弱性があれば悪用され得ます。使っていないプラグイン・テーマは停止ではなく削除します。

  • 管理画面の「プラグイン」で停止中のものを削除
  • 「外観 > テーマ」でも、使っていないテーマを削除する。デフォルトテーマ(Twenty系)を1つだけ残し、ほかは消す
  • プラグインは「多機能な1つ」より「必要十分な最小構成」を意識する。プラグインが増えるほど攻撃面が広がる

機能の足し算ではなく、攻撃面の引き算で考えるのがセキュリティの基本です。


③ 管理者ユーザー名を「admin」にしない

ブルートフォースは「ユーザー名」と「パスワード」の2つを当てる作業です。ユーザー名がadminだと、攻撃者は片側を当てる手間が消え、パスワードだけ総当たりすればよくなります。

  • 新規にカスタム名の管理者ユーザーを作成 → そのユーザーでログインし直す → 元のadminユーザーを削除(投稿は新ユーザーに引き継ぐ)
  • 投稿者アーカイブのURL(?author=1)からログイン名が露出することがある。表示名(ニックネーム)とログイン名を別にしておく
  • ログイン名の推測を避けるため、公開される「表示名」をログインIDと一致させない

④ 強固なパスワード + 2段階認証

パスワードは「長さ」が最も効きます。複雑な記号より、十分に長くランダムな文字列のほうが現実的な強度を持ちます。

  • パスワードマネージャーで20文字以上のランダム文字列を生成し、使い回さない
  • そのうえで2段階認証(2FA)を必須化する。WordPressでは「WP 2FA」「Two-Factor」などのプラグインで認証アプリ(TOTP)を有効化できる
  • フィッシング耐性まで求めるなら、TOTPよりFIDO2セキュリティキーが強い。仕組みはフィッシング耐性のある2FA・FIDO2セキュリティキー解説を参照

パスワードが漏れても、2FAがあれば不正ログインを止められます。管理者アカウントには必ず設定します。


⑤ wp-login.php と xmlrpc.php を保護する

wp-login.phpはログイン総当たりの標的、xmlrpc.phpはかつてブルートフォース増幅やpingback悪用に使われてきたエンドポイントです。使っていないなら閉じる、使うなら絞るのが原則です。

xmlrpc.php

Jetpackやモバイルアプリ連携などで必要な場合を除き、多くのサイトでは不要です。不要なら無効化します。

  • 「Disable XML-RPC」系プラグインで無効化する方法が手軽
  • サーバーで直接遮断する場合、Apache(.htaccess)では次のように拒否できます
# xmlrpc.php へのアクセスを全拒否(.htaccess)
<Files xmlrpc.php>
    Require all denied
</Files>

Nginxならlocation = /xmlrpc.php { deny all; }で同等のことができます。

wp-login.php

ログインページはレート制限・IP制限で守ります。

  • 「Limit Login Attempts Reloaded」などのプラグインで、一定回数失敗したIPを一時ロックアウトする
  • 管理アクセスが固定IPからのみなら、.htaccessやWAFでログインページを自IPに限定する(⑩で後述)
  • 上位の防御としてCloudflareのRate Limitingでログインパスに閾値を設ける方法もあります(Cloudflare WAFで悪質Botをブロックする設定

⑥ ファイル権限と wp-config.php の保護

wp-config.phpにはDB接続情報と認証用のシークレットキーが入っています。ここが読まれると被害が一気に深刻化します。

推奨パーミッション

対象推奨権限補足
ディレクトリ全般755書き込みは所有者のみ
ファイル全般644同上
wp-config.php600 または 640より厳しく絞る

権限は環境(サーバーのユーザー構成)により最適値が変わるため、共有レンタルサーバーではホスティング側の推奨値に従ってください。誤って厳しすぎる権限にするとサイトが動かなくなります。

wp-config.php への直接アクセスを拒否(Apache)

<Files wp-config.php>
    Require all denied
</Files>

加えて、認証用シークレットキー(SALT)はWordPress公式のシークレットキー生成サービスで生成した値に設定しておきます。


⑦ WAF(Cloudflare / プラグイン)を入れる

WAF(Web Application Firewall)は、攻撃リクエストがWordPressに届く手前で遮断する層です。①〜⑥がサイト内部の戸締まりだとすれば、WAFは敷地の外周フェンスにあたります。

  • Cloudflare: DNSをCloudflare経由にすると、無料プランでも基本的なマネージドルールとBot対策が使えます。WordPress向けのカスタムルール例はCloudflare WAFの設定記事を参照
  • プラグイン型WAF: 「Wordfence」「SiteGuard WP Plugin」など。サーバー単独運用でも導入しやすい
  • 両方を併用する場合、二重チャレンジで正規ユーザーを巻き込まないよう、まず緩い設定から始めてログで誤検知を確認する

ネットワーク層(Cloudflare)とアプリ層(プラグイン)は守る範囲が異なるため、可能なら組み合わせると堅くなります。


⑧ 自動バックアップを取る

どれだけ防御しても侵入確率はゼロにはなりません。復旧できる状態を常に持っておくことが、最後の保険になります。

  • 「UpdraftPlus」「BackWPup」などで、データベースとファイルを定期自動バックアップする
  • 保存先はサーバー内ではなく外部(クラウドストレージ等)にする。サーバーごと侵害された場合、同一サーバー上のバックアップは信用できないため
  • 取得して終わりにせず、復元テストを一度は実行しておく。復元できないバックアップは無いのと同じです
  • バックアップの頻度は更新頻度に合わせる(毎日更新するサイトなら日次)

⑨ SSL / HTTPS化する

通信の暗号化は今や前提です。HTTPのままだとログイン情報が平文で流れ、公衆Wi-Fiなどで盗聴されるリスクが残ります。

  • 多くのレンタルサーバーは無料SSL(Let’s Encrypt)を管理画面から有効化できます
  • 自前サーバーの場合はCertbotで取得・自動更新を設定します(Let’s Encryptで無料HTTPSを設定する手順
  • HTTPS化後は、WordPressの「設定 > 一般」でサイトURLをhttps://に統一し、混在コンテンツ(HTTP読み込み)を解消する

⑩ 管理画面(wp-admin)のアクセスを制限する

ログイン突破を試みる前に、そもそも管理画面に到達させないのが最も確実です。固定IPで運用できるなら、IP制限が効果的です。

Apache(.htaccess)でのIP制限例

# wp-admin を特定IPのみ許可(.htaccess を wp-admin/ 配下に設置)
Require all denied
Require ip 203.0.113.10

203.0.113.10を自分の固定IPに置き換えます。複数拠点ならRequire ipを行で追加します。

  • 固定IPがない環境では、IP制限の代わりにBasic認証(.htpasswd)でwp-adminに二重ロックをかける方法があります
  • ログインURL自体を変更する「SiteGuard WP Plugin」等の手法もありますが、これは「隠す」だけで根本対策ではないため、④⑤と併用が前提です

まとめ

対策効果まず最初にやるなら
① 更新の徹底既知脆弱性を塞ぐ(最重要)
② 不要プラグイン削除攻撃面を減らす
③ admin名を使わない総当たりの片側を消す
④ 強固なPW + 2FA不正ログインを止める
⑤ wp-login/xmlrpc保護総当たり・増幅を遮断
⑥ 権限とwp-config保護設定情報の窃取を防ぐ
⑦ WAF攻撃を手前で遮断
⑧ 自動バックアップ復旧手段を確保
⑨ SSL/HTTPS通信の盗聴を防ぐ
⑩ wp-admin制限管理面への到達を断つ

セキュリティは「一度設定して終わり」ではなく、更新とログ確認を回し続ける運用です。まずは①〜④と⑧、⑨という低難易度・高効果の項目を当日中に潰し、⑤〜⑦⑩を順に締めていくのが現実的な進め方です。


各サービス公式

土台になるホスティング自体が高速で堅牢だと、セキュリティ運用の前提が安定します。表示速度と安定性で評価が高い高速ホスティングとしてmixhostがあります。

テーマ起因の脆弱性を避けるには、更新が継続している有料テーマを選ぶのも有効です。国産でSEO・更新サポートに定評のあるWordPress 有料テーマ Emanonは選択肢の一つです。

関連記事

バックアップ・障害対策・監視バックアップの復元テストを自動化する:月次DR演習のスクリプト例バックアップ・障害対策・監視Restic + S3互換ストレージで安全バックアップ:暗号化・世代管理・検証までバックアップ・障害対策・監視3-2-1バックアップとは?データを失わないための最小設計【2026年】
記事一覧に戻る