WordPressセキュリティ対策 〜実践チェックリストと設定ガイド〜

  • Bookmark
  • -
    Copy
WordPressセキュリティ対策 実践チェックリストと設定ガイド

この記事では、 WordPressサイトを運営する担当者が

「今日から具体的に何を設定し、どう運用すべきか」

を解説する実践ガイドです。

独立行政法人情報処理推進機構(IPA)でも、「安全なウェブサイトの作り方」等のガイドラインにて、Webサイトの脆弱性対策の重要性が強調されており、具体的な対策の実装が急務となっています。

なお、 攻撃手法のトレンドや「なぜ多層防御が必要なのか」 といった戦略的な全体像については、 以下の記事で体系的に解説しています。 本記事と合わせて参照することで、 より盤石なセキュリティ体制を構築できます。

それでは早速、見ていきましょう。

1. レベル別セキュリティ対策チェックリスト

現在のサイト状況に合わせて、優先的に実施すべき項目をレベル別に整理しました。

まずはレベル1の完遂を目指してください。

レベル1:今日からでもすぐやるべき必須対策!!!

WordPress本体・プラグインの更新ダッシュボードに通知が出ている更新をすべて完了させる。
(※セキュリティアップデートは必ず, メジャーアップデートは計画的に)

→ 参考:WordPress 安全なアップデート手順|基礎知識編
不要なプラグインの完全削除「無効化」ではなく「削除」を実行する。
使っていないテーマも削除する。
adminユーザーの廃止ユーザー名で、「admin」という名前を使用していないか確認。
攻撃者からするととても推測しやすい名前のため、使用している場合は新規管理者を作成し、adminを削除。
パスワードの強化12文字以上、英数字記号混じりのパスワードに変更する。推測されやすい意味を持った文字列は避けること。

→ 参考:安全なパスワードの設定・管理 – 総務省
ログインURLの変更デフォルトの /wp-login.php を変更する。

レベル2:今週中に実施!!

2段階認証(2FA)の導入
管理画面ログイン時にスマホアプリ等の認証を必須にする。少なくとも、ベーシック認証は設定する。
ログイン試行回数の制限
一定回数ログインに失敗したIPアドレスをロックする設定を入れる。
プラグイン(Limit Login Attempts Reloaded – Login Security, Brute Force Protection, Firewall)などでも対応可能
XML-RPCの無効化
外部アプリからの投稿などの操作ができる機能を使わない場合は無効化し、攻撃経路を塞ぐ

→ 参考:WordPressのXML-RPCを外部アクセス確認と無効化する方法
自動バックアップの設定
週1回以上、外部ストレージ(Google Drive等)への自動バックアップを設定する。

→ 参考:【設定方法解説!】WordPressサイトのバックアップは自動化しよう
WAF(Web Application Firewall)の導入
サーバ付属のWAFまたはプラグインベースのファイアウォールを有効化する。

→ 参考:ネットワーク・WAF・監視のセキュリティ

レベル3:今月中に整備!

ファイルパーミッションの厳格化
wp-config.php を400または440に設定するなど、サーバレベルでの権限管理を行う。
KUSANAGIの推奨パーミッションは、440(r– r– —) です。

→参考:Changing File Permissions
管理画面へのIP制限
社内ネットワークや固定IPからのみ /wp-admin/ へのアクセスを許可する。
※ これは、特定のIPアドレスから管理画面に入る運用ができる場合に使えます。リモートワークの社員や外部の業者さんがWordPressの管理画面ログインをする場合は利用が難しいです。
DBプレフィックスの変更
デフォルトの wp_ をランダムな文字列に変更する(構築時推奨)。
セキュリティヘッダーの付与
X-Frame-Options, X-XSS-Protection などをレスポンスヘッダに追加する。
管理者アクティビティログの監視
「誰がいつログインし、何を変更したか」を記録・監視する体制を作る。

2. 推奨プラグイン組み合わせパターン

次はプラグインです。「どのプラグインを利用するのがいいのか?」は永遠の課題ではないでしょうか。

回答としては、サイト規模やサイト状況によって変わります。機能重複(競合)を避けつつ、最大限の効果を得るための組み合わせ例を紹介します。

もちろん、プラグインだけで全てを対応する必要はなく、サーバ側の機能や利用しているサービスの機能を利用する形で実現することも可能です。

パターンA:個人ブログ・小規模サイト向け(無料・軽快)

役割推奨プラグイン(例)設定のポイント
基本防御SiteGuard WP PluginログインURL変更、画像認証、ログインロック機能を使用。日本語対応で使いやすい。
バックアップUpdraftPlusGoogle Drive連携を設定し、スケジュールバックアップを有効化。
備考軽量で初心者向け。サーバー側のWAF機能(例:ロリポップ、さくらのWAF)との併用を推奨。

パターンB:ECサイト・企業サイト向け(堅牢性・運用性重視)

役割推奨プラグイン(例)設定のポイント
統合セキュリティWordfence Security or SiteGuard WP Pluginファイアウォール、マルウェアスキャン、2段階認証を一括導入。通知メールの設定を必ず行う。
ログイン隠蔽WPS Hide Login軽いプラグインで、簡単で安全にログインフォーム ページの URL を好きに変更できるようにします。
ログ監視WP Activity Log「誰が記事を公開したか」「誰が設定を変えたか」を詳細に記録。監査ログとして活用。
バックアップBackWPup or UpdraftPlusデータベースとファイルを別スケジュールでバックアップするなど、細かな設定が可能。
認証強化Two Factorシンプルに2要素認証機能のみを追加。全管理者アカウントに強制適用する。
プラグイン競合に注意

WordfenceとSiteGuardなど、類似機能を持つプラグインを複数有効化すると、サイトが重くなったり不具合の原因になります。必ず1つのメインプラグインを選定してください。

3. 設定ファイルのセキュリティ強化例

続いて、プラグインだけでなく、設定ファイル(.htaccessやwp-config.php)を直接編集することで、より強固なセキュリティを実現できます。 ※編集前には必ずバックアップを取得してください。

.htaccess によるセキュリティ強化(Apache/LiteSpeed)

以下のコードを .htaccess ファイルの末尾(# END WordPress の後など)に追加します。

1. wp-config.php へのアクセスを遮断

<files wp-config.php>
order deny,allow
Deny from all
</files>

2. ディレクトリ一覧表示(Index表示)の禁止

ファイルが存在しないディレクトリにアクセスされた際、ファイル一覧が見えてしまうのを防ぎます。

Options -Indexes

3. XML-RPCへのアクセス遮断

<Files xmlrpc.php>
Order Allow,Deny
Deny from all
</Files>

4. 特定のIPアドレスのみ管理画面へのアクセスを許可

※ 固定IPアドレスを持っている場合のみ推奨
※ 203.0.113.1 はサンプルです。自社の固定IP(グローバルIP)に置き換えてください。

<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from 203.0.113.1
</Files>

nginx でのセキュリティ設定

nginxサーバーは、高速な動作が特徴のWebサーバで、プライム・ストラテジーのKUSANAGIでも推奨しています。しかし、おなじみの .htaccess が使えません。

(ちなみに、少し技術的な部分に踏み込むと、KUSANAGIは、Apacheとnginxのどちらも利用ができ、組み合わせることも可能です。 参考:httpd-behind-nginxでNginxとApache HTTP Serverをいいとこ取りする

そのため、以下の設定を nginx の設定ファイル(通常 /etc/nginx/sites-available/サイト名 または /etc/nginx/nginx.conf)の server { … } ブロック内に記述します。

※設定後は必ず sudo nginx -t で構文チェックを行い、sudo systemctl reload nginx で反映してください。

1. wp-config.php へのアクセスを遮断

location ~* /wp-config.php {
deny all;
}

2. ディレクトリ一覧表示(Index表示)の禁止

autoindex off;

3. XML-RPCへのアクセス遮断

location = /xmlrpc.php {
    deny all;
}

4. 特定のIPアドレスのみ管理画面へのアクセスを許可

※ 固定IPアドレスを持っている場合のみ推奨
location = /wp-login.php は特異性が高く、既存の location ~ .php$ より優先されます。 そのため、このブロック内でも PHP(php-fpm)に渡す設定 を引き継がないと、ログイン画面が表示できなくなることがあります。
※ 以下の例はそのままコピペしないでください(環境依存)
 - fastcgi_pass のソケット/ホスト名は環境により異なります(例:/run/php/php8.2-fpm.sock)。
 - 多くの環境では include fastcgi_params; よりも include snippets/fastcgi-php.conf; を使う構成が一般的です(ディストリにより異なる)。
 - 反映前に必ず sudo nginx -t を実行し、成功してから sudo systemctl reload nginx を実行してください。
 - 203.0.113.1 はサンプルです。自社の固定IP(グローバルIP)に置き換えてください。

location = /wp-login.php {
    allow 203.0.113.1;
    deny all;

    # ▼ここから下は "皆さまの環境の既存設定" に合わせて調整
    include snippets/fastcgi-php.conf;  # ない場合は fastcgi_params 等を使用
    fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 例:環境に合わせて変更
}

参考:
https://www.cyberciti.biz/faq/nginx-block-url-access-all-except-one-ip-address/
https://nginx.org/en/docs/http/ngx_http_access_module.html
https://nginx.org/en/docs/ngx_core_module.html#include
https://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_pass

5. 管理画面ディレクトリ全体へのIP制限

location /wp-admin/ {
    allow 203.0.113.1;
    deny all;
}

※ 203.0.113.1 はサンプルです。自社の固定IP(グローバルIP)に置き換えてください。

nginx設定の注意点
  • nginx設定ファイルの編集には管理者権限(sudo)が必要です。
  • 設定ミスはサイト全体のダウンにつながるため、必ずバックアップと構文チェックを行ってください。
  • レンタルサーバーではnginx設定ファイルへの直接アクセスができない場合があります。その場合はコントロールパネルの機能やプラグインを使用してください。

wp-config.php による設定

WordPressイラスト

データベース接続情報などが記載された重要ファイルです。以下の設定を追加できます。
参考: https://developer.wordpress.org/advanced-administration/wordpress/wp-config/

管理画面でのファイル編集を無効化

WordPressダッシュボードの「テーマエディタ」「プラグインエディタ」を無効化し、侵入されてもコードを書き換えられないようにします。

define( 'DISALLOW_FILE_EDIT', true );

SSL強制(管理画面・ログイン画面)

define( 'FORCE_SSL_ADMIN', true );

適切なパーミッション設定(SSHコマンド例)

SSHでサーバーに接続できる場合、以下のコマンドで推奨パーミッションを一括設定できます。

一括変更前の注意

  • 所有者(chown)が適切でないと、更新・アップロードが失敗することがあります。権限(chmod)だけでなく所有者も確認してください。
  • wp-content/uploads など書き込みが必要なディレクトリは、サーバー構成(PHP-FPMの実行ユーザー等)によって例外対応が必要になる場合があります。
# ディレクトリを755に設定
find /path/to/wordpress -type d -exec chmod 755 {} \;

# ファイルを644に設定
find /path/to/wordpress -type f -exec chmod 644 {} \;

# wp-config.phpを440に設定
chmod 440 /path/to/wordpress/wp-config.php

参考:https://developer.wordpress.org/advanced-administration/server/file-permissions/

4. トラブルシューティング集

続いて、WordPressのセキュリティ対策を実施する中で発生しがちなトラブルと、その対処法をまとめました。

ケース1:プラグインでログインURLを変更したが、新しいURLを忘れてしまった

対処法:

  1. FTPまたはファイルマネージャでサーバーに接続する。
  2. /wp-content/plugins/ ディレクトリ内にある、URL変更プラグイン(例: wps-hide-login)のフォルダ名を一時的に変更する(例: _wps-hide-login)。
  3. プラグインが強制的に無効化され、デフォルトの /wp-login.php でログイン可能になる。
  4. ログイン後、フォルダ名を元に戻し、再度プラグインを有効化して設定を確認する。

ケース2:プラグインなどのアップデート後に画面が真っ白になった

対処法:

  1. wp-config.php の define( 'WP_DEBUG', false );true に変更し、エラーメッセージを表示させる。
  2. エラーメッセージに特定のプラグイン名が含まれている場合、FTPでそのプラグインフォルダをリネームして無効化する。
  3. それでも直らない場合、直前に取ったバックアップからファイルを復元する。

※今の時代では、トラブルシューティングは生成AI(Gemini や ChatGPTなど)に聞いてみるのも良い手法です!

ケース3:自分自身のIPアドレスがロックされてログインできない

対処法:

  1. スマートフォンの4G/5G回線など、別のネットワーク(別のIPアドレス)からアクセスを試みる。
  2. どうしても入れない場合、FTPでセキュリティプラグインのフォルダ名を変更して一時的に無効化する。
  3. データベース(phpMyAdmin等)を操作し、ロックアウト記録テーブル(プラグインにより異なる)をクリアする(上級者向け)。

ケース4:nginx設定の編集ミスでサイトが表示されなくなった

対処法:

  1. SSHでサーバーに接続し、まず sudo nginx -t を実行して構文エラーの箇所を確認する。
# 構文チェック
sudo nginx -t

# エラー例:
# nginx: [emerg] unexpected "}" in /etc/nginx/sites-available/example.com:45
# nginx: configuration file /etc/nginx/nginx.conf test failed
  1. エラーメッセージで指定された行番号の設定を修正、またはバックアップから復元する。
  2. 構文チェックが成功したら、nginxを再起動する。
  3. sudo systemctl reload nginx
  4. バックアップがない場合は、追加した設定行をコメントアウト(行頭に # を追加)して一時的に無効化し、動作を復旧させる。

nginx設定を編集する前の必須作業として、必ず以下の手順を踏んでください:

  1. 現在の設定ファイルをバックアップ:以下例です。
    sudo cp /etc/nginx/sites-available/サイト名 /etc/nginx/sites-available/サイト名.backup
  2. 編集後、必ず構文チェック:sudo nginx -t
  3. 構文チェックが成功してから反映:sudo systemctl reload nginx

※ 参考:https://nginx.org/en/docs/beginners_guide.html

5. WordPressセキュリティ運用カレンダー

セキュリティは継続的な運用が命です。そこで目処となるスケジュールをお示しいたします。ご参考に、点検を行ってください。

頻度実施項目担当者
毎日 ⚠️自動バックアップが成功しているか通知メールを確認セキュリティプラグインからのアラート通知がないか確認Web担当者
毎週
✅️
WordPress本体・プラグイン・テーマの更新有無チェック更新の実施(ステージング環境でのテスト推奨)
不正なログイン履歴がないかログを目視確認
Web担当者
毎月
📅
バックアップデータからの復元テスト(正しく戻せるか確認)
不要なアカウント(退職者など)の棚卸し
削除パスワードの変更(ポリシーによる)
システム管理者
四半期
👨‍💻
導入プラグインの見直し(不要なものの削除)
PHPやデータベースバージョンのサポート期限確認
セキュリティ診断の実施(簡易診断または外部診断)
責任者

6. セキュリティ自己診断チェックリスト(全40項目)

最後に、自社サイトのセキュリティ状況を網羅的に確認するための詳細チェックリストを掲載します。定期的な監査にご活用ください。

A. アカウント・認証管理
adminユーザーが存在しない
パスワードは12文字以上かつ複雑である
ユーザーごとに個別のアカウントを発行している(使い回しなし)
退職者のアカウントは即時削除または停止されている
2段階認証(2FA), 少なくともベーシック認証が導入されている
ログイン試行回数制限が設定されている
強制ログアウト(セッションタイムアウト)が設定されている
B. バージョン・更新管理
WordPress本体は最新バージョンである
プラグインはすべて最新バージョンである
テーマはすべて最新バージョンである
PHPのバージョンは公式サポート期間内である
1年以上更新のないプラグインを使用していない
無効化されたまま放置されているプラグインがない
C. システム・サーバ設定
ログインURLがデフォルト(wp-login.php)から変更されている
wp-config.php のパーミッションは440または400である
ディレクトリ一覧表示が無効化されている(Apache: Options -Indexes / nginx: autoindex off)
XML-RPCが無効化されている(使用しない場合)
WAF(Web Application Firewall)が有効である
常時SSL化(HTTPS)されており、HTTPアクセスはリダイレクトされる
ファイル編集機能(テーマエディタ等)が無効化されている
wp-config.phpへの直接アクセスが遮断されている(.htaccessまたはnginx設定)
D. 運用・バックアップ
定期的な自動バックアップが設定されている
バックアップデータは外部ストレージに保存されている
バックアップからの復元手順が確立されている
セキュリティログ(操作履歴)を取得している
緊急時の連絡体制が決まっている

まとめ

本記事では、WordPressセキュリティの実践的な設定手順とチェックリストを紹介しました。これらの対策を一つずつ確実に実施することで、サイトの安全性は格段に向上します。

しかし、攻撃手法は日々進化しています。より長期的な視点でのセキュリティ戦略や、組織としての運用体制、あるいは「KUSANAGI」のようなセキュアなインフラの活用については、以下も本記事の実装ガイドと合わせて、ぜひご一読ください。

また、「これらの対策、なかなか自社だけだと難しい。サイトたくさんあって対応が現実的ではないかも。」という方には、プライム・ストラテジーが企業様のWordPressサイトからサーバ運用までをフルマネージドするKUSANAGIマネージドサービスもございます。気になる方は一度ページをご覧いただき、ご質問等はぜひお問い合わせください。

「まだ全然どうするか決まってないけど相談してよいのだろうか?」という方も大歓迎です。お話しいただくことで状況が整理されて次の行動につながると思います。

プライム・ストラテジーでは、Web担当者様、IT担当者様などの
お役立ち資料やYouTube動画を公開しています。ご興味ある方はぜひご覧ください。

執筆者/穂苅 智哉(プライム・ストラテジー株式会社  マーケティング&セールス部 マーケティング室 室長)

2016年からプライム・ストラテジーに入社し、営業・ディレクター・マーケティング・アライアンスを経験。
2021年から、外資IT企業にてパートナービジネスを担当する、Partner Development Managerとして、数十のパートナー企業様を担当し、双方のビジネス拡大のために活動。
2025年から、再びプライム・ストラテジーにてマーケティング室 室長として社内マーケやパートナープログラムなどを担当。

仕事以外では、旅行、釣り、ロードバイク、ドライブ、温泉・サウナ、ジャズ、カフェ巡りなどアクティブ派。今年はパラグライダーとキャンプをやってみたい。

主な著書:WordPressの教科書5.x対応版、WordPressの教科書6.x対応版

Tomoya Hokari
  • Bookmark
  • -
    Copy