あなたのWordPressサイト、本当に安全ですか?──攻撃の現実から見直す

Web・ECサイト防御

WordPressは2025年現在、世界中のWebサイトの約43%を動かしているといわれるCMSです(W3Techs調べ)。ブログから企業サイト、ECサイト、会員制サービスまで、あらゆる用途で使われています。

しかし、これほど普及しているがゆえに、WordPressは世界で最も攻撃を受けているCMSでもあります。セキュリティ企業Sucuriの年次レポートによれば、マルウェアに感染したCMSサイトのうち96%以上がWordPressだったというデータがあります。また、WordPressサイトへの攻撃の90%以上はプラグインの脆弱性に起因するという分析もあります。

「自分の小さなブログが狙われるわけがない」と思っていませんか? 実際の攻撃の多くは、特定のサイトを狙って行われるのではなく、インターネット上のWordPressサイトを自動的にスキャンして脆弱性を探す自動化ツールによるものです。サイトの規模や知名度は関係ありません。WordPressで動いているというだけで、24時間365日、攻撃の試みにさらされているのが現実です。

この記事では、WordPressサイトを守るために今すぐ確認・対応すべき20のセキュリティチェックポイントを、「やらないとどうなるか」という具体的なリスクとともに解説します。チェックリスト形式でまとめているので、自サイトの現状確認にそのままご活用ください。

📌 この記事でわかること
・WordPressが狙われる理由と攻撃の種類
・今すぐ確認すべき20のセキュリティチェックポイント
・各設定を「やらないとどうなるか」の具体的リスク
・無料・低コストでできるセキュリティ強化策
・セキュリティプラグインの選び方と使い方


  1. WordPressへの主な攻撃手法を知っておく
    1. ブルートフォース攻撃(総当たり攻撃)
    2. SQLインジェクション
    3. クロスサイトスクリプティング(XSS)
    4. ファイルインクルード攻撃・リモートコード実行(RCE)
    5. スパムリンク注入(SEOスパム)
  2. WordPress セキュリティ チェックリスト 20項目
    1. ✅ チェック1:WordPressコア・テーマ・プラグインを常に最新版に保つ
    2. ✅ チェック2:管理者ユーザー名「admin」を使わない
    3. ✅ チェック3:強力なパスワードを設定し、定期的に変更する
    4. ✅ チェック4:二要素認証(2FA)を導入する
    5. ✅ チェック5:ログインページのURLを変更する
    6. ✅ チェック6:ログイン試行回数を制限する
    7. ✅ チェック7:WordPressのバージョン情報を非表示にする
    8. ✅ チェック8:REST APIと不要なXML-RPC機能を制限する
    9. ✅ チェック9:セキュリティヘッダーを設定する
    10. ✅ チェック10:SSL/TLS(HTTPS)を必ず有効にする
    11. ✅ チェック11:wp-config.php を保護する
    12. ✅ チェック12:データベーステーブルのプレフィックスを変更する
    13. ✅ チェック13:ファイルの直接編集を無効にする
    14. ✅ チェック14:定期的なバックアップを自動化する
    15. ✅ チェック15:Webアプリケーションファイアウォール(WAF)を導入する
    16. ✅ チェック16:不審なファイルを検出するマルウェアスキャンを定期実施する
    17. ✅ チェック17:ユーザーの権限を必要最小限に設定する(最小権限の原則)
    18. ✅ チェック18:ホスティング環境のセキュリティを確認する
    19. ✅ チェック19:.htaccess で重要なファイルへのアクセスを制限する
    20. ✅ チェック20:セキュリティログを記録・監視する
  3. チェックリスト まとめ表
  4. おすすめセキュリティプラグイン比較
  5. セキュリティ強化の「優先順位」──どこから始めるべきか
    1. 今すぐ(今日中に)やること
    2. 今週中にやること
    3. 今月中にやること
  6. まとめ──セキュリティは「一度やれば終わり」ではない

WordPressへの主な攻撃手法を知っておく

対策を取る前に、どのような攻撃が実際に行われているかを把握しておくことが重要です。敵の手口を知ることが、最善の防御につながります。

ブルートフォース攻撃(総当たり攻撃)

WordPressのログインページ(/wp-login.php)に対して、ありふれたID・パスワードの組み合わせを自動的に試し続ける攻撃です。「admin」「password」「123456」などの弱いパスワードは数秒で突破されます。Verizonの「2024 Data Breach Investigations Report」では、データ侵害の68%以上に人的要素(弱いパスワードを含む)が関与していると報告されています。

SQLインジェクション

プラグインやテーマの入力フィールドを通じて悪意あるSQLコードを送り込み、データベースから情報を盗んだり、管理者アカウントを乗っ取ったりする攻撃です。WordPressのデータベースにはユーザー情報・投稿・設定値のすべてが保存されているため、攻撃に成功されると壊滅的な被害になります。

クロスサイトスクリプティング(XSS)

コメント欄やフォームを通じて悪意あるJavaScriptコードをサイトに埋め込み、訪問者のブラウザ上で実行させる攻撃です。訪問者のCookieを盗んだり、偽のログインフォームを表示してフィッシングを行ったりします。

ファイルインクルード攻撃・リモートコード実行(RCE)

脆弱なプラグインやテーマを悪用して、サーバー上に任意のPHPファイルを設置・実行する攻撃です。成功するとサーバーをほぼ完全に掌握され、Webシェル(バックドア)を仕掛けられます。

スパムリンク注入(SEOスパム)

サイトのコンテンツに大量のスパムリンク(医薬品・ギャンブル・アダルトサイトへのリンク)を密かに埋め込む攻撃です。訪問者には見えないよう隠蔽されることが多く、気づかないうちにGoogleからペナルティを受けて検索順位が急落することがあります。


WordPress セキュリティ チェックリスト 20項目

以下のチェックリストを使って、自分のサイトの現状を確認してください。「○(対応済み)」「△(未対応・要対応)」「✕(未実施)」などを書き込みながら読み進めることをお勧めします。


✅ チェック1:WordPressコア・テーマ・プラグインを常に最新版に保つ

重要度🔴 最重要
設定場所管理画面 → ダッシュボード → 更新
やらないとどうなるか既知の脆弱性を持つ古いバージョンは、攻撃者にとって「既製の攻撃ツール」がある状態と同じです。CVE(共通脆弱性識別子)データベースには、公開された脆弱性情報が詳細に掲載されており、攻撃者はこれを利用してパッチ未適用のサイトを自動スキャンして攻撃します。

Sucuriの調査では、ハッキングされたWordPressサイトの39.3%がWordPress本体のバージョンが古かったと報告されています。プラグインとテーマも同様で、特に放置されたプラグインは格好の標的になります。

具体的な対応方法:

  • 管理画面 → 設定 → 一般 で自動更新の設定を確認する
  • マイナーバージョンの自動更新(セキュリティアップデート)は有効にする
  • 使っていないプラグイン・テーマは「無効化」ではなく「削除」する(無効化でも脆弱性は存在し続ける)
  • 更新前は必ずバックアップを取る(チェック14参照)

✅ チェック2:管理者ユーザー名「admin」を使わない

重要度🔴 最重要
設定場所管理画面 → ユーザー → プロフィール
やらないとどうなるかブルートフォース攻撃ツールは最初に「admin」というユーザー名でログインを試みます。ユーザー名が「admin」のままだと、攻撃者はすでに「ユーザー名」という情報を得た状態でパスワードだけを総当たりすればよくなるため、攻撃の難易度が半減します。

具体的な対応方法:

  • 新しい管理者ユーザーを別の名前で作成する(例:wp_admin_yourname のように推測されにくい名前)
  • 新ユーザーで管理者権限を付与してログインし直す
  • 旧「admin」アカウントを削除する(投稿は新管理者に帰属変更する)
  • ユーザー名はメールアドレスではない形式を推奨(メールアドレスをユーザー名にすると、メルマガや問い合わせフォームから推測されやすい)

✅ チェック3:強力なパスワードを設定し、定期的に変更する

重要度🔴 最重要
設定場所管理画面 → ユーザー → プロフィール → パスワードを生成
やらないとどうなるか「password123」「自分の名前+生年月日」のような弱いパスワードは、クレデンシャルスタッフィング攻撃(他のサービスから流出したID・パスワードの組み合わせを試す攻撃)でも突破されます。Verizon DBIRによれば、不正アクセスの86%に盗まれた認証情報が使用されています。

具体的な対応方法:

  • WordPressが自動生成する強力なパスワードをそのまま使用する(英大小文字・数字・記号を含む20文字以上
  • パスワードマネージャー(Bitwarden、1Password、KeePassなど)で管理する
  • 他のサービスとパスワードを絶対に使い回さない
  • Have I Been Pwned(https://haveibeenpwned.com/)でメールアドレスが過去の流出リストに含まれていないか確認する

✅ チェック4:二要素認証(2FA)を導入する

重要度🔴 最重要
設定場所セキュリティプラグイン経由(Wordfence、WP 2FA など)
やらないとどうなるかパスワードが何らかの方法で漏洩した場合、2FAがなければそのパスワードだけで不正ログインが成立します。Microsoftの調査では、2FAを導入するだけでアカウント乗っ取りの99.9%以上を防止できるとされています。

具体的な対応方法:

  • プラグイン「WP 2FA」または「Wordfence Security」で2FAを設定する
  • 認証アプリはGoogle Authenticator、Authy、Microsoft Authenticatorが広く使われている(SMSよりも認証アプリの方が安全)
  • 管理者だけでなく、編集者・投稿者などすべての権限ロールに2FAを強制することを検討する
  • バックアップコード(リカバリーコード)は安全な場所に保管しておく

✅ チェック5:ログインページのURLを変更する

重要度🟠 高
設定場所プラグイン「WPS Hide Login」など
やらないとどうなるかWordPressのデフォルトログインURL(/wp-login.php および /wp-admin/)は全世界共通です。攻撃ツールはこのURLを自動的に叩いてブルートフォース攻撃を行います。URLを変更するだけで、自動化攻撃ツールの多くを回避できます。

具体的な対応方法:

  • プラグイン「WPS Hide Login」をインストールし、ログインURLを推測されにくいパスに変更する(例:/my-secure-login-2024
  • 新しいURLは必ずメモして安全な場所に保存する(忘れると自分もログインできなくなる
  • 変更後は /wp-login.php へのアクセスを .htaccess または nginxの設定で403/404を返すよう設定するとさらに効果的
  • ログインURLはセキュリティの難読化であり、強力なパスワード・2FAの代替にはならないことを理解する

✅ チェック6:ログイン試行回数を制限する

重要度🔴 最重要
設定場所セキュリティプラグイン(Wordfence、Limit Login Attempts Reloaded など)
やらないとどうなるかデフォルトのWordPressはログイン試行回数に制限がありません。つまり、攻撃ツールは毎秒何百回もパスワードを試し続けることができます。自動化ツールによるブルートフォース攻撃が事実上「やり放題」の状態です。

具体的な対応方法:

  • プラグイン「Limit Login Attempts Reloaded」または「Wordfence Security」でログイン試行回数を制限する
  • 推奨設定:5回失敗でIPアドレスを20分ロック、繰り返し失敗で24時間ロックなど
  • 自分のIPアドレスはホワイトリストに登録しておくと、誤操作でロックされた際に対処しやすい
  • ロックアウトの通知メールを有効にして不審なアクセスを把握する

✅ チェック7:WordPressのバージョン情報を非表示にする

重要度🟡 中
設定場所functions.php または セキュリティプラグイン
やらないとどうなるかWordPressはデフォルトで、HTMLソースの <meta name="generator"> タグやフィードなどにバージョン情報を出力します。攻撃者はこの情報を使って、そのバージョンに対応した既知の脆弱性を調べ、ピンポイントで攻撃ツールを選択できます。

具体的な対応方法:

  • 子テーマの functions.php に以下のコードを追加する:
// WordPressバージョン情報を非表示にする
remove_action('wp_head', 'wp_generator');

// RSSフィードからもバージョン情報を削除
add_filter('the_generator', '__return_empty_string');
  • セキュリティプラグイン(Wordfence、iThemes Security など)にも同様の設定項目がある
  • ログインページのエラーメッセージも汎用的なものに変更することで、ユーザー名の存在確認攻撃(ユーザー列挙)を防げる

✅ チェック8:REST APIと不要なXML-RPC機能を制限する

重要度🟠 高
設定場所functions.php または セキュリティプラグイン
やらないとどうなるかXML-RPC(/xmlrpc.php)はWordPressの古いAPI機能で、1回のリクエストで何千回ものパスワード試行ができるため、ブルートフォース攻撃の増幅器として悪用されます。また、DDoS攻撃の踏み台にも使われます。REST APIも未認証で公開されているエンドポイントはユーザー情報の列挙などに使われます。

具体的な対応方法:

  • XML-RPCを使っていない場合は完全に無効化する(JetpackなどはXML-RPCを使用するため要確認)
  • 子テーマの functions.php でXML-RPCを無効化:
// XML-RPC を完全に無効化する
add_filter('xmlrpc_enabled', '__return_false');

// ログインしていないユーザーへのREST APIのユーザー情報を制限
add_filter('rest_endpoints', function($endpoints) {
    if (!is_user_logged_in()) {
        if (isset($endpoints['/wp/v2/users'])) {
            unset($endpoints['/wp/v2/users']);
        }
        if (isset($endpoints['/wp/v2/users/(?P<id>[\d]+)'])) {
            unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
        }
    }
    return $endpoints;
});
  • nginxまたはApacheの設定で /xmlrpc.php へのアクセスをブロックする方法もある

✅ チェック9:セキュリティヘッダーを設定する

重要度🟠 高
設定場所.htaccess(Apache)または nginx.conf または プラグイン
やらないとどうなるかHTTPセキュリティヘッダーが設定されていないと、クリックジャッキング攻撃(サイトをiframeに埋め込んで偽装操作させる)、XSS攻撃、MIMEタイプスニッフィング攻撃などに対して無防備になります。

具体的な対応方法(Apacheの場合は.htaccessに追記):

# クリックジャッキング防止
Header always set X-Frame-Options "SAMEORIGIN"

# XSS保護(ブラウザの組み込みXSSフィルター)
Header always set X-XSS-Protection "1; mode=block"

# MIMEタイプスニッフィング防止
Header always set X-Content-Type-Options "nosniff"

# リファラー情報を制限
Header always set Referrer-Policy "strict-origin-when-cross-origin"

# HTTPSを強制(HSTS)- HTTPSサイトのみ設定
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

# コンテンツセキュリティポリシー(慎重に設定する)
# Header always set Content-Security-Policy "default-src 'self'"
  • プラグイン「HTTP Headers」や「Wordfence」でGUI設定も可能
  • https://securityheaders.com/ でサイトのヘッダー設定を無料でスキャン・評価できる

✅ チェック10:SSL/TLS(HTTPS)を必ず有効にする

重要度🔴 最重要
設定場所ホスティング管理画面 または Let’s Encrypt
やらないとどうなるかHTTPSを使っていないサイトでは、ユーザーのログイン情報・入力フォームの内容・Cookie(セッション情報)がすべて平文でネットワーク上を流れます。同じWi-Fiネットワーク上の第三者(カフェ・ホテルなど)に盗み見られる可能性があります。また、2024年現在、GoogleはHTTPSを使っていないサイトをSEO上でも不利に扱います。

具体的な対応方法:

  • 多くのレンタルサーバー(エックスサーバー、さくらインターネット、ConoHa WINGなど)は無料SSL(Let’s Encrypt)を管理画面から簡単に設定できる
  • SSL設定後、WordPressの管理画面 → 設定 → 一般 でWordPressアドレスとサイトアドレスを https:// に変更する
  • プラグイン「Really Simple SSL」で混在コンテンツ(Mixed Content)も一括修正できる
  • SSL証明書の有効期限は定期的に確認する(Let’s Encryptは90日ごとに自動更新されるが、更新の失敗には要注意)

✅ チェック11:wp-config.php を保護する

重要度🔴 最重要
設定場所.htaccess(Apache)またはサーバー設定
やらないとどうなるかwp-config.php にはデータベースのホスト名・ユーザー名・パスワード、セキュリティキー、テーブルプレフィックスなど、サイト運営に関わるすべての機密情報が含まれています。このファイルが外部から読み取られると、データベースに直接アクセスされサイトを完全に掌握されます。

具体的な対応方法:

  • wp-config.php のパーミッションを 400 または 440 に設定する(所有者のみ読み取り可能)
  • .htaccess(Apacheの場合)に以下を追加してHTTPアクセスを拒否する:
<Files wp-config.php>
    order allow,deny
    deny from all
</Files>
  • wp-config.php をWebのルートディレクトリより1つ上の階層に移動する方法もある(WordPressは自動的に上位ディレクトリを探す)
  • wp-config.php 内のセキュリティキー(AUTH_KEYなど)は WordPress.orgの秘密鍵生成サービスで定期的に更新する

✅ チェック12:データベーステーブルのプレフィックスを変更する

重要度🟡 中
設定場所wp-config.php(新規インストール時)または プラグイン(既存サイト)
やらないとどうなるかWordPressのデフォルトのデータベーステーブルプレフィックスは wp_ です。SQLインジェクション攻撃ではテーブル名を直接指定することが多く、wp_ のままでは攻撃コードがそのまま通用します。プレフィックスを変更することで攻撃の一部を無効化できます。

具体的な対応方法:

  • 新規インストール時は wp-config.php の $table_prefix = 'wp_'; を $table_prefix = 'mywp73_'; のように変更する(英数字のみ使用可)
  • 既存サイトの変更はデータベースの直接操作が必要なため、必ずフルバックアップ後に実施する
  • プラグイン「iThemes Security」や「WP-DBManager」でGUI操作でプレフィックス変更できる(リスクあり、バックアップ必須)

✅ チェック13:ファイルの直接編集を無効にする

重要度🟠 高
設定場所wp-config.php
やらないとどうなるかWordPressの管理画面には、テーマやプラグインのPHPファイルをブラウザ上で直接編集できる機能があります(外観 → テーマエディター)。管理者アカウントが乗っ取られた場合、このエディターを使ってマルウェアのコードを直接埋め込まれる可能性があります。

具体的な対応方法:

  • wp-config.php に以下の1行を追加するだけで管理画面からのファイル編集を無効化できる:
// 管理画面からのテーマ・プラグインファイル編集を無効化
define('DISALLOW_FILE_EDIT', true);

// さらにプラグインのインストール・更新も管理画面から禁止する場合
// define('DISALLOW_FILE_MODS', true);
  • DISALLOW_FILE_MODS を有効にすると管理画面からのプラグイン・テーマのインストールも無効になるため、サーバー経由(FTPやSSH)での更新作業が必要になる点を理解したうえで設定する

✅ チェック14:定期的なバックアップを自動化する

重要度🔴 最重要
設定場所バックアッププラグイン(UpdraftPlus など)
やらないとどうなるかバックアップがない状態でマルウェア感染・ハッキング・誤操作が発生すると、サイトの完全復旧が不可能または非常に困難になります。「バックアップがあれば最悪でも元の状態に戻せる」という安全網は、すべてのセキュリティ対策の前提です。

具体的な対応方法:

  • プラグイン「UpdraftPlus」(無料版で十分な機能あり)を使い、自動バックアップを設定する
  • バックアップの保存先はサーバーと別の場所に設定する(Googleドライブ、Amazon S3、Dropboxなど)。サーバーが攻撃されてもバックアップが安全に保たれる
  • バックアップの頻度の目安:毎日更新するサイトは毎日、週1更新なら週1以上
  • バックアップが正常に取れているか、定期的に復元テストを行う(バックアップが破損していた、という事態を防ぐ)
  • バックアップは最低でも3世代保持する(最新のバックアップがすでに感染済みのケースに備える)

✅ チェック15:Webアプリケーションファイアウォール(WAF)を導入する

重要度🟠 高
設定場所セキュリティプラグイン(Wordfence など)またはCDN(Cloudflare など)
やらないとどうなるかWAFなしのWordPressサイトは、SQLインジェクション・XSS・ファイルインクルード攻撃など既知の攻撃パターンをそのままPHPが処理することになります。WAFはこれらの悪意あるリクエストをWordPressが処理する前に遮断します。

具体的な対応方法:

  • プラグイン型WAF:「Wordfence Security」(無料版あり)が最も広く使われている。インストールするだけで即座にWAF機能が有効になる
  • CDN型WAF:「Cloudflare」の無料プランにも基本的なWAF機能が含まれる。CDNとしてDDoS耐性も向上するため特に高トラフィックサイトにお勧め
  • Wordfenceの場合、「学習期間(Learning Mode)」が終了したら「有効化(Enabled and Protecting)」に切り替えることを忘れずに

✅ チェック16:不審なファイルを検出するマルウェアスキャンを定期実施する

重要度🟠 高
設定場所セキュリティプラグイン(Wordfence、Sucuri など)
やらないとどうなるかWordPressサイトへの攻撃の多くは、感染後すぐに悪意ある動作を始めるのではなく、発見を避けながら長期間潜伏します。Sucuriの調査では、感染サイトのオーナーの多くが感染から数週間〜数ヶ月間、感染に気づいていなかったと報告されています。定期的なスキャンが早期発見の鍵です。

具体的な対応方法:

  • Wordfence Security」の「Scan」機能で週1回以上のスキャンをスケジュール設定する
  • Sucuri SiteCheck」(https://sitecheck.sucuri.net/)は無料でサイトの外部スキャンができるオンラインツール
  • スキャン結果で「Modified Files」(改ざんファイル)が検出された場合は即座に対応する
  • Google Search Consoleの「セキュリティの問題」セクションも定期確認する(Googleがマルウェアを検知すると警告が出る)

✅ チェック17:ユーザーの権限を必要最小限に設定する(最小権限の原則)

重要度🟠 高
設定場所管理画面 → ユーザー → ユーザー一覧
やらないとどうなるかすべてのユーザーに管理者権限を与えていると、そのうち1人のアカウントが乗っ取られるだけでサイト全体が危険にさらされます。「最小権限の原則」は情報セキュリティの基本原則のひとつで、各ユーザーは業務に必要な最低限の権限のみを持つべきというものです。

WordPressのユーザーロール(権限)は以下のとおりです。

ロール主な権限推奨用途
管理者すべての操作サイト管理者のみ(最小人数に限定)
編集者全投稿の編集・公開・削除コンテンツ責任者
投稿者自分の投稿の編集・公開定期的に記事を書くライター
寄稿者自分の投稿の作成・編集(公開不可)外部ライター・レビュー必要な投稿者
購読者プロフィール編集・コメント会員制サイトの一般会員

具体的な対応方法:

  • 管理者アカウントの数を最小限に絞る(理想は1〜2人)
  • 使わなくなったアカウントは必ず削除する(退職者・外部ライターの契約終了など)
  • 定期的にユーザー一覧を棚卸しして、不審なアカウントや不要なアカウントがないか確認する

✅ チェック18:ホスティング環境のセキュリティを確認する

重要度🔴 最重要
設定場所ホスティング管理画面・サポート確認
やらないとどうなるかWordPressのセキュリティをいくら強化しても、その下で動くサーバー・PHPのバージョンが古ければ意味がありません。PHPのEOL(サポート終了)バージョンはセキュリティパッチが提供されず、既知の脆弱性が放置された状態になります。

確認すべきポイント:

  • PHPバージョン:2025年現在、PHP 8.1以降(推奨はPHP 8.2・8.3)を使用しているか確認する。PHP 7.4以前はEOLのため絶対に使用しない。バージョンは管理画面 → ツール → サイトヘルスで確認できる
  • MySQLバージョン:MySQL 5.6以前はEOL。MySQL 8.0以降またはMariaDB 10.5以降を推奨
  • 共有サーバーのリスク:共有ホスティングでは同じサーバーの他ユーザーのサイトが感染すると影響を受ける可能性がある(サーバー会社の隔離設定による)。重要なビジネスサイトにはVPS・専用サーバーの使用を検討する
  • サーバーサイドのWAF・ファイアウォール:ホスティング会社がサーバー側でWAFを提供しているか確認する

✅ チェック19:.htaccess で重要なファイルへのアクセスを制限する

重要度🟠 高
設定場所.htaccess(Apacheの場合)
やらないとどうなるかwp-includes や wp-admin 以下のPHPファイルが直接アクセスされることで、古いバージョンのWordPressが持つ脆弱性を突かれることがあります。また、ディレクトリリスティングが有効な場合、サーバー上のファイル一覧が攻撃者に公開されます。

Apacheの.htaccessに追記する推奨設定:

# ディレクトリリスティングを無効化
Options -Indexes

# wp-includes 内のPHPファイルへの直接アクセスを制限
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

# .htaccess ファイル自体へのアクセスを禁止
<Files .htaccess>
    order allow,deny
    deny from all
</Files>

# readme.html, license.txt へのアクセスを禁止(バージョン情報漏洩防止)
<Files readme.html>
    order allow,deny
    deny from all
</Files>
<Files license.txt>
    order allow,deny
    deny from all
</Files>

✅ チェック20:セキュリティログを記録・監視する

重要度🟠 高
設定場所プラグイン(WP Activity Log など)
やらないとどうなるかログがなければ「いつ・誰が・何をしたか」が記録されません。不正アクセスや改ざんが発生した際の原因調査・被害範囲の特定ができず、同じ被害が繰り返される可能性があります。また、内部からの不正操作(複数人で管理しているサイトの場合)も把握できません。

具体的な対応方法:

  • プラグイン「WP Activity Log」で管理画面上のあらゆる操作(ログイン・ファイル変更・設定変更・投稿操作など)を記録する
  • Wordfenceの「Live Traffic」機能でリアルタイムのアクセスログと攻撃試行を確認する
  • ログは定期的に確認し、不審なログイン(通常とは異なる時間帯・IPアドレス)がないかチェックする
  • 重要なイベント(管理者ログイン・設定変更)はメール通知を設定しておく

チェックリスト まとめ表

以下の表を印刷またはコピーして、自サイトのセキュリティ状態を定期的に確認してください。

#チェック項目重要度状態
1WordPressコア・テーマ・プラグインを最新版に保つ🔴 最重要○ △ ✕
2管理者ユーザー名「admin」を使わない🔴 最重要○ △ ✕
3強力なパスワードを設定する🔴 最重要○ △ ✕
4二要素認証(2FA)を導入する🔴 最重要○ △ ✕
5ログインページのURLを変更する🟠 高○ △ ✕
6ログイン試行回数を制限する🔴 最重要○ △ ✕
7WordPressのバージョン情報を非表示にする🟡 中○ △ ✕
8REST APIとXML-RPC機能を制限する🟠 高○ △ ✕
9セキュリティヘッダーを設定する🟠 高○ △ ✕
10SSL/TLS(HTTPS)を有効にする🔴 最重要○ △ ✕
11wp-config.php を保護する🔴 最重要○ △ ✕
12データベーステーブルプレフィックスを変更する🟡 中○ △ ✕
13ファイルの直接編集を無効にする🟠 高○ △ ✕
14定期的なバックアップを自動化する🔴 最重要○ △ ✕
15WAF(Webアプリケーションファイアウォール)を導入する🟠 高○ △ ✕
16マルウェアスキャンを定期実施する🟠 高○ △ ✕
17ユーザーの権限を最小限に設定する🟠 高○ △ ✕
18ホスティング環境(PHPバージョンなど)を確認する🔴 最重要○ △ ✕
19.htaccess で重要ファイルへのアクセスを制限する🟠 高○ △ ✕
20セキュリティログを記録・監視する🟠 高○ △ ✕

おすすめセキュリティプラグイン比較

WordPressのセキュリティ対策を効率よく進めるうえで、セキュリティプラグインは強力な助けになります。ただし、複数の重複するプラグインを入れすぎると競合・パフォーマンス低下の原因になります。以下を参考に1〜2本に絞って導入することをお勧めします。

プラグイン名無料版の主な機能有料版特徴
Wordfence SecurityWAF・マルウェアスキャン・ログイン保護・2FA・ライブトラフィックあり(月額)機能が豊富で最も広く使われている。ただし重い(大規模サイト向き)
Sucuri Securityマルウェアスキャン・セキュリティ強化・ログあり(WAF含む)クラウドWAFが強力。無料版でも監査ログが使いやすい
iThemes Securityログイン保護・ファイル変更検知・ユーザーアクション記録あり設定のガイドが丁寧。初心者向き
WPS Hide LoginログインURLの変更のみなし(完全無料)軽量で1機能に特化。他プラグインと組み合わせて使う
UpdraftPlus自動バックアップ・クラウド保存・復元ありバックアップ専門。信頼性が高く定番

セキュリティ強化の「優先順位」──どこから始めるべきか

20項目を一度に全部対応するのは大変に感じるかもしれません。以下の順番で優先して取り組むことをお勧めします。

今すぐ(今日中に)やること

  1. WordPressコア・テーマ・プラグインをすべて最新版に更新する
  2. 管理者のパスワードを強力なものに変更する
  3. 「admin」ユーザーを使っている場合は別名のユーザーを作成して切り替える
  4. HTTPSが有効になっているか確認する
  5. 使っていないプラグイン・テーマを削除する

今週中にやること

  1. 二要素認証(2FA)を設定する
  2. ログイン試行回数の制限を設定する(Wordfenceのインストール)
  3. 自動バックアップを設定して外部ストレージへの保存を確認する
  4. wp-config.php の保護設定を行う
  5. DISALLOW_FILE_EDIT を有効にする

今月中にやること

  1. セキュリティヘッダーを設定してスコアを確認する
  2. XML-RPCと不要なREST APIエンドポイントを無効化する
  3. ログインURLを変更する
  4. ユーザー権限の棚卸しを行う
  5. PHPバージョンを確認・更新する

まとめ──セキュリティは「一度やれば終わり」ではない

WordPressのセキュリティ対策に「完璧な状態」はありません。新しい脆弱性は毎日発見され、攻撃手法は常に進化しています。重要なのは、継続的に確認・更新し続ける習慣を作ることです。

本記事で紹介した20のチェックポイントをすべて対応できれば、大多数の自動化攻撃や日和見的なハッキング試行に対する十分な防御が整います。完璧を目指して何もしないより、できるところから一つひとつ積み上げていくことが大切です。

最後に、セキュリティ対策の根本原則をまとめます。

  • 多層防御(Defense in Depth):一つの対策が突破されても次の層で止める。単一の対策に依存しない
  • 最小権限の原則:必要最低限の権限のみを与える
  • 定期的な確認・更新:セキュリティは一度設定すれば終わりではなく、継続的な管理が必要
  • バックアップは最後の砦:すべての対策が破られても、バックアップがあれば復旧できる

あなたのサイトを守るのは、最終的にはあなた自身です。今日からでも遅くありません。まずはチェックリストを眺めながら、自分のサイトの現状確認から始めてみてください。

📚 参考・公式リソース
・WordPress公式セキュリティホワイトペーパー:https://wordpress.org/about/security/
・Wordfence公式サイト:https://www.wordfence.com/
・Sucuri セキュリティブログ:https://blog.sucuri.net/
・WPScan脆弱性データベース:https://wpscan.com/
・Security Headers チェックツール:https://securityheaders.com/
・Have I Been Pwned(メールアドレス流出確認):https://haveibeenpwned.com/

コメント