• ワードプレス

実際の脅威からWordPressサイトを守る方法

  • Felix Rose-Collins
  • 31 min read

はじめに

WordPressへのハッキングのほとんどは、誰かがあなたのサイトを狙っているわけではありません。通常は、古いプラグイン、脆弱なログイン、開放されたままの設定など、一般的な弱点をインターネット上でスキャンする自動化されたボットによるものです。もしあなたのサイトが侵入されやすいように見えた場合、ボットは数分以内に攻撃を開始する可能性があります。

サイトを保護するために、セキュリティエンジニアのような高度なスキルは必要ありません。必要なのは、相互に連携して効果を発揮するいくつかの基本的な対策です。WordPressの重要な設定を厳重にロックし、サーバーへのアクセスルールを追加し、すべてを最新の状態に保ち、バックアップと監視を徹底してください。そうすれば、問題を早期に発見して迅速に復旧でき、数週間後に被害に気づくような事態を回避できます。

このガイドは実用的な内容に絞っています。まずは影響の大きい基本事項から始め、その後、より詳細なセキュリティ強化へと進みます。

WordPressサイトに対する一般的なセキュリティ攻撃 {#common-security-attacks-on-wordpress-sites}

WordPressへの攻撃の多くは、よく知られたパターンに従います。ボットはまず一般的な侵入経路を調査し、その後、最も悪用しやすい箇所へと移行します。

Common Security Attacks on WordPress Sites

実際のWordPressサイトで遭遇する最も一般的なリスクは以下の通りです。

ブルートフォース {#brute-force}

ブルートフォース攻撃が有効なのは、自動化が容易であり、かつ依然として成果が得られるからです。ボットは単一のパスワードを推測するのではなく、ログインページで毎分数千ものユーザー名とパスワードの組み合わせを試行します。クレデンシャルスタッフィングは、他の侵害事件で流出した認証情報を使用するため、さらに効果的です。流出した認証情報が一致すれば、即座に管理者権限を取得できます。

このような攻撃が発生すると、トラフィックの急増、繰り返されるリダイレクト、そしてプラグインやサーバーの認証ログに多数のログイン失敗が記録されます。情報漏洩がなくても、CPUリソースを消費し、サイトの速度を低下させ、ログを溢れさせる原因となります。

脆弱なプラグインとテーマ {#vulnerable-plugins-and-themes}

WordPressのコアに問題が生じることもありますが、通常はプラグインやテーマが真の問題です。攻撃者がこれらを標的にするのは、バージョンの特定が容易であり、エクスプロイトコードが急速に拡散するためです。

Ranktrackerの紹介

効果的なSEOのためのオールインワン・プラットフォーム

ビジネスが成功する背景には、強力なSEOキャンペーンがあります。しかし、数え切れないほどの最適化ツールやテクニックがあるため、どこから手をつければいいのかわからないこともあります。でも、もう心配はありません。効果的なSEOのためのオールインワンプラットフォーム「Ranktracker」を紹介します。

Ranktrackerの登録がついに無料になりました。

無料アカウント作成

または認証情報を使ってサインインする

危険信号としては、開発が放棄されたプラグイン、有料ツールの無料版、更新の遅れなどが挙げられます。その影響は、リモートコード実行からデータベースの盗難、SEOスパムの注入まで多岐にわたります。

マルウェアの注入 {#malware-injection}

マルウェアは、書き込み可能な場所や見落とされがちな場所に潜んでいることがよくあります。例えば、wp-content/uploads/にドロップされた悪意のあるスクリプト、乱雑なPHPコードで密かに改変されたプラグインファイル、あるいはテンプレートや投稿を通じて拡散するようにデータベースに注入されたコードなどが挙げられます。

典型的な兆候には、モバイル専用リダイレクト、正体不明の管理者ユーザー、不審なcronジョブ、異常なスケジュールタスク、外部へのリクエスト急増、Search Consoleやホストからの不正利用警告などが挙げられます。これらはしばしば、再感染、スパム、ブラックリスト登録のリスクにつながります。

SEOスパム攻撃 {#seo-spam-attacks}

SEOスパムは、必ずしも人間の目には見えません。攻撃者は、クローラーにしか見えない隠しリンク、スパムページ、またはコンテンツを追加します。データベースにスパムを注入したり、不正なサイトマップを追加したり、.htaccessを改変してボットに異なるコンテンツを配信したりする場合もあります。

最初の手がかりは通常、検索結果に現れます。奇妙なインデックス登録されたURLや、トラフィックの急激な減少などです。ドメインはスパム関連のキーワードで順位付けされ始め、本来のページの可視性が失われます。スパムはデータベース全体に散在していることが多いため、クリーンアップには時間がかかります。

SQLインジェクション {#sql-injection}

SQLインジェクションは、プラグインやカスタムコードが安全でないデータをデータベースに送信した際に発生します。一般的な兆候には、不審なURLクエリ文字列、ファイアウォールログにおけるSQLiアラート、データベース負荷の急激な増加などがあります。攻撃者がユーザー情報や設定を変更した場合、データの盗難、コンテンツの改ざん、および継続的なアクセス権の侵害につながる可能性があります。

クロスサイトリクエストフォージェリー {#cross-site-request-forgery}

クロスサイトリクエストフォージェリ(CSRF)は、WordPressにログインしている状態で、プラグインが適切なセキュリティチェックを行っていない場合に発生します。攻撃者は、ユーザー作成、メールアドレスの変更、設定の更新などのアクションをトリガーするリンクをクリックさせるよう、ユーザーを騙すことができます。

クリック直後に意図しない管理画面の変更が発生した場合は、危険信号と見なすべきです。攻撃はユーザーのセッションを通じて実行されるため、ログ上は正常に見える場合がありますが、権限が密かに変更され、サイト乗っ取りにつながる可能性があります。

クロスサイトスクリプティング {#cross-site-scripting}

クロスサイトスクリプティング(XSS)は、プラグインやテーマがユーザーコンテンツを事前に検証せずに表示した際に発生します。保存型XSSはさらに深刻で、悪意のあるコードが保存され、後で(管理画面内でも)実行される可能性があるため、攻撃者が設定の変更、ユーザーの追加、またはプラグインのインストールを行えるようになります。

投稿や設定に不審なスクリプトが表示されたり、ログイン専用ページへのリダイレクトが発生したり、自分が行っていない変更が確認されたりすることがあります。これにより、セッションの乗っ取りや、データベースに保存された持続的な感染につながる可能性があります。

セキュリティの基本 {#baseline-security-essentials}

まずは基本から始めましょう。簡単な侵入経路を排除し、デフォルトでシステムを破られにくくします。

安全なWordPressホスティングの選択 {#choose-a-secure-wordpress-hosting}

WordPressを強化しても、ホスティング環境が脆弱であれば被害を受ける可能性があります。ホスティングはサイトが動作する環境を制御しており、その環境はセキュリティに多大な影響を与えます。

セキュリティ重視のホスティングには、以下の要素が含まれている必要があります。

  • 分離と安全なデフォルト設定

アカウント同士が相互に影響し合うような過密なサーバーにサイトが置かれている場合、最初から余分なリスクを抱えていることになります。強力なアカウント分離、適切なファイル権限、そしてデフォルトで危険なサービスを公開しない設定を備えたホスティングを探しましょう。

  • サーバーレベルの保護

信頼できるホスティングサービスは、ファイアウォールルール、ボットフィルタリング、セキュリティパッチの適用、およびセキュリティ強化された設定を適切に管理します。十分な安全性を確保するために、わざわざサーバーにログインして設定を微調整する必要はないはずです。

  • バックアップと高速復元

問題が発生した際、対応の速さが重要です。自動バックアップと迅速な復旧機能は、ビジネスを守ります。

  • 可視性

アクセスログ、エラーログ、パフォーマンス指標を活用すれば、ブルートフォース攻撃の兆候、PHPの問題、リソースの急増を、サービス停止に至る前に検知できます。

  • SSL

SSL証明書はログインやセッションを暗号化し、転送中のデータの機密性を確保します。セキュアなホスティングでは、証明書の設定や自動更新が容易に行え、有効期限切れの問題を回避できます。

Ranktrackerの紹介

効果的なSEOのためのオールインワン・プラットフォーム

ビジネスが成功する背景には、強力なSEOキャンペーンがあります。しかし、数え切れないほどの最適化ツールやテクニックがあるため、どこから手をつければいいのかわからないこともあります。でも、もう心配はありません。効果的なSEOのためのオールインワンプラットフォーム「Ranktracker」を紹介します。

Ranktrackerの登録がついに無料になりました。

無料アカウント作成

または認証情報を使ってサインインする

マネージドWordPressプラットフォームでは、一般的な脅威がWordPressに到達する前に阻止するための多くの保護機能がすでに実装されています。例えば、Cloudwaysのマネージドホスティングには、ファイアウォール、自動バックアップ、オプションのWAFアドオン、SafeUpdatesなどのプラットフォームレベルのセキュリティ機能が含まれています。それでも、更新やアクセス制御の責任はユーザーにありますが、より安全な基盤から始めることができます。

Cloudwaysでは、専門家によるウェブサイト移行サポートも提供しており、初回移行は無料で利用できます。

SSL証明書のインストール {#install-an-ssl-certificate}

ウェブサイトのURLの横にある小さな鍵のアイコンに気づいたことはありますか?これは、そのサイトがHTTPSを使用していることを意味します。これは訪問者に対して、サイトの接続が安全であり、データが保護されていることを伝えています。これがなければ、ハッカーがログイン情報や支払いデータなどの機密情報を傍受する可能性があります。

SSL(Secure Sockets Layer)は、ウェブサイトと訪問者の間のデータを暗号化します。これにより通信が保護され、パスワードや顧客データが平文で送信されるのを防ぎます。ブログ、オンラインストア、ポートフォリオのいずれを運営している場合でも、SSL証明書の導入はもはやオプションではなく、必須となっています。

SSLオプションの選択

ほとんどのホスティングプロバイダーでは、数回のクリックで有効化できる無料のSSLオプションを提供しています。Cloudwaysでは、プラットフォームから直接無料のLet’s Encrypt証明書を有効化できます。

ビジネス向けの証明書や特定の検証方法が必要な場合は、DigiCertやSectigoなどのプロバイダーから購入することも可能です。

CSRの生成

証明書署名要求(CSR)とは、サーバーが証明書プロバイダーに送信する要求のことです。通常、ホスティングダッシュボード内に「CSRを生成」というオプションがあります。

ドメイン、組織名、所在地などの基本情報を入力し、CSRを生成します。プロバイダーはこのCSRを使用して証明書を発行します。

ドメイン所有権の確認

証明書が発行される前に、ドメインの所有権を証明する必要があります。プロバイダーによって異なりますが、通常は次のいずれかの方法で行います:確認メールの受信確認、DNSレコードの追加、または小さな確認ファイルのアップロードです。この確認が完了すると、証明書が発行されます。

証明書のインストール

ホスティングダッシュボードで証明書をインストールまたはアップロードします。「SSL管理」や「セキュリティ設定」などの項目を探し、表示される指示に従って適切なドメインに紐付けます。

Install the certificate

HTTPSを強制する

SSLのインストール後、すべてのトラフィックがデフォルトでHTTPS経由になるように設定してください。これにより、訪問者は常にサイトのセキュアなバージョンにアクセスできるようになります。

これは「Really Simple SSL」のようなプラグインを使用するか、wp-config.phpに以下の設定を追加してWordPress管理画面でHTTPSを強制することができます:

内部リンクを更新する

設定やデータベース内で、サイトが依然として古いHTTP URLを参照している場合、ブラウザに「混合コンテンツ」の警告が表示される可能性があります。すべてのコンテンツがHTTPS経由で読み込まれるよう、それらの内部リンクを更新してください。

セキュリティ面だけでなく、SSLは信頼性を高め、SEOにも役立ちます。これは、プライバシーを重視していることを訪問者に伝える、手軽なアップグレードです。

WordPress、テーマ、プラグインを最新の状態に保つ {#keep-wordpress-themes-and-plugins-updated}

アップデートはセキュリティそのものです。ほとんどのリリースでは既知の脆弱性が修正されています。脆弱性が公表されると、ボットが古いバージョンのままのサイトをスキャンし始め、その隙に感染が発生します。

WordPress コアの更新

コアの更新には、たとえ更新内容が小さく見えても、多くの場合セキュリティ修正が含まれています。

Update WordPress Core

WordPress コアを更新するには、以下の手順に従ってください:

  • WordPressの管理画面 → 「更新」に移動します。
  • WordPress の画面で、更新が利用可能な場合は「今すぐ更新」をクリックします。
  • 完了したら、サイトを開き、正常に読み込まれ、ログインできることを確認してください。

実用的な更新ルーチン

  • 少なくともマイナーバージョンの自動更新を有効にしてください。
  • メジャーアップデートにはステージング環境を使用してください。
  • パッチ適用と回帰テストのために、毎月メンテナンス時間を確保してください。

Cloudwaysのようなホスティングプラットフォームを選択した場合、「SafeUpdates」機能により、本番環境に変更を適用する前に、バックアップとステージングのワークフローを通じてWordPressコア、プラグイン、テーマの更新がスケジュールされます。

テーマの更新

WordPressテーマを更新するには、以下の手順に従ってください:

  • WordPressの管理画面 → 「更新」に移動します。

Updates

  • そこにテーマの更新が表示されている場合は、チェックボックスを選択し、「テーマを更新」をクリックします。
  • 完了後、ホームページ、メニュー、主要ページが正しく読み込まれるか確認してください。

使用していないプラグインとテーマを削除する

使用されていないプラグインやテーマはサーバー上に残ったままになります。これらを削除することで、セキュリティリスクを低減し、攻撃対象領域を縮小できます。

themes

クリーンアップのチェックリスト:

  • 使用していないプラグインやテーマは削除してください。無効化してもファイルが残ってしまうことがあります。
  • フォーム、キャッシュ、SEO、またはECに関連するプラグインについては、まずステージング環境で削除をテストしてください。
  • 使用中のテーマとバックアップ用テーマを1つだけ残してください。
  • クリーンアップ後、ログイン、フォーム、チェックアウト、検索が正常に動作することを確認してください。
  • インストール済みのプラグインとテーマは毎月確認してください。

​​使用していないWordPressプラグインを削除するには、以下の手順に従ってください:

  • WordPressの管理画面で、「プラグイン」→「インストール済みプラグイン」に移動します。
  • 不要なプラグインを見つけます。
  • 無効化」をクリックします。その後、「削除」オプションが表示されます。
  • 削除」をクリックし、確認メッセージが表示されたら確認してください。

次に、以下の手順に従って、使用していないテーマを削除してください:

  • WordPressの管理画面で、「外観」→「テーマ」に移動します。
  • 不要なテーマをクリックします。
  • 削除」をクリックし、確認メッセージが表示されたら確認します。

信頼できるテーマとプラグインを選ぶ

機能が素晴らしく見えても、すべてのプラグインが信頼に値するわけではありません。最近の定期的な更新、明確なドキュメント、活発なサポート、そして現在のWordPressバージョンとの互換性を確認してください。

インストール前の確認事項:

  • 開発が放棄されたプラグインやテーマは使用しないでください。
  • 無効化されたプラグインやテーマは使用しないでください。
  • 信頼できるベンダーでない限り、マーケットプレイス以外からのダウンロードには注意してください。
  • 最近更新されていないものや、現在のWordPressバージョンを明確にサポートしていないものはスキップしてください。

実用的なセキュリティ運用 {#practical-security-operations}

これらは、日常的なリスクを低減し、ボットによるノイズを削減し、問題を早期に発見するのに役立つ定期的な手順です。

攻撃者は、予測可能で常にアクセス可能なログインページを狙ってきます。管理者のアクセス経路を厳重に保護し、ボットが壁にぶつかるようにし、盗まれたパスワードが即座のアクセス権に結びつかないようにしてください。

二要素認証の利用 {#use-two-factor-authentication}

二要素認証は、クレデンシャルスタッフィングや認証情報の流用による乗っ取りのほとんどを阻止します。管理者アカウントでこれを有効にしておけば、パスワードが盗まれた場合でもログインをブロックできます。

WordPressサイトで2FAを有効にするには、信頼できる2FAプラグインと、スマートフォン用の認証アプリを選択してください。一般的な2FAプラグインには、miniOrange 2FA、WP 2FA、Wordfence Login Security、Two Factorなどがあります。

二要素認証を有効にする:

  • WordPress ダッシュボードで、「プラグイン」→「新規追加」に移動します。
  • 2FAプラグインを検索し、「インストール」して「有効化」します。
  • 左側のサイドバーからプラグインのメニューを開きます(通常は「セキュリティ」の下、または独立した項目として表示されます)。
  • Two-Factor Authentication」または「2FA」を見つけ、「Authenticatorアプリ」を選択します。
  • 認証アプリでQRコードをスキャンするか、セットアップキーを入力してください。
  • 確認のためにワンタイムコードを入力し、「有効化」または「アクティベート」をクリックします。
  • リカバリーコードをダウンロードし、パスワードマネージャーに保存してください。

管理者ロールに2FAを適用する:

  • プラグインの設定を開きます。通常は「設定」または「セキュリティ」→「2FA」にあります。
  • 2FAを必須にする」をオンにします。
  • 管理者および編集者のロールに対してこれを適用し、ECストアを運営している場合はショップマネージャーも追加してください。
  • 別々のデバイスで少なくとも2つの管理者アカウントを登録した後、変更を保存してください。

2FA

デフォルトのログインURLを変更する {#change-the-default-login-url}

ほとんどのWordPressサイトでは、ログイン用URLとして「/wp-login.php」、管理ダッシュボード用URLとして「/wp-admin/」という同じデフォルトURLが使用されています。ボットはこれらのURLを把握しているため、繰り返し試行し続けます。

ログインURLを変更しても、執拗な攻撃者を完全に阻止することはできませんが、自動化されたログインスパムやブルートフォース攻撃を減らすことは可能です。

WordPressでデフォルトのログインURLを変更するには、以下の手順に従ってください:

  • プラグイン」→「新規追加」に移動します。
  • ログインURL変更プラグインをインストールし、有効化します。
  • 設定」または「セキュリティ」の下にあるプラグインの設定を開きます。
  • 新しいログインURLを設定し、「変更を保存」をクリックします。
  • ログアウトし、シークレットウィンドウで新しいURLをテストしてください。

一意の管理者ユーザー名を使用する {#use-a-unique-admin-username}

** **「admin」は、あらゆるブルートフォース攻撃リストで最初に試されるユーザー名です。これを使用すると、攻撃者に必要な情報の半分を与えてしまうことになります。

WordPressで一意の管理者ユーザー名を使用するには、以下の手順に従ってください:

  • ユーザー」→「新規追加」に移動します。
  • 一意のユーザー名を使用して新しいユーザーを作成します。ドメイン名、ブランド名、またはメールアドレスのプレフィックスは使用しないでください。
  • 役割を「管理者」に設定し、アカウントを作成します。
  • ログアウトし、新しい管理者ユーザーで再度ログインします。
  • ユーザー」→「すべてのユーザー」に移動します。
  • 以前の管理者アカウントを見つけ、その役割を低いレベルに変更するか、削除してください。削除する場合は、WordPressからプロンプトが表示されたら、そのコンテンツを新しい管理者に割り当ててください。

ログイン試行回数の制限 {#limit-login-attempts}

ボットが無制限にパスワードを試行できないようにしてください。数回ログインに失敗したら、そのIPアドレスを一定時間ブロックします。

まずは簡単な対策から

  • Wordfence、Limit Login Attempts Reloaded、Loginizerなどのレート制限機能を備えたプラグインをインストールしてください。
  • ホスティングプロバイダのファイアウォールダッシュボードでレート制限が利用可能な場合は、有効にしてください。

高度なサーバー設定

Nginxのレート制限の例(Nginxの設定を管理している場合は推奨):

NginxのHTTPコンテキストに以下を追加してください:

次に、サーバーブロック内でログインエンドポイントへの制限を追加します:

ヒント:正当なユーザーがブロックされてしまう場合は、「rate」または「burst」の値を上げてください。十分にテストを行ってください。

強力な管理者パスワードを使用する {#use-strong-admin-passwords}

管理者パスワードは覚えやすいものである必要はありません。推測されにくいものである必要があります。パスワードマネージャーを使用して、長くランダムなパスワードを生成し、各管理者アカウントに固有のパスワードを設定してください。そうすれば、あるサービスが侵害されても、WordPressの管理画面へのアクセス権が流出しません。

設定のヒント:** **

  • 可能であれば、組織のポリシーでパスワードの再利用を禁止してください。
  • チームメンバーが退職した際は、直ちに管理者パスワードを変更してください。

WordPressで管理者パスワードを変更するには、以下の手順に従ってください:

  • ユーザー」→「すべてのユーザー」に移動します。
  • 管理者ユーザーを編集します。
  • 新しいパスワードを設定」をクリックし、次に「ユーザーを更新」をクリックします。

推奨されるWordPressセキュリティプラグインを使用する {#use-recommended-wordpress-security-plugins}

セキュリティプラグインですべての問題が解決するわけではありませんが、迅速な保護と、はるかに優れた可視性を提供してくれます。何かおかしいと感じたときに、実際に活用できるログが必要なのです。

優れたセキュリティプラグインには以下の機能が含まれます:

  • 予期せぬ変更を検知するためのファイル整合性監視
  • ログイン保護と2段階認証の強制
  • 明確なクリーンアップおよび復旧手順を備えたマルウェアスキャン
  • 実際に確認できるアラートと監査ログ
  • 基本的なファイアウォールルール

必要な機能がわかったら、WordfenceSucuriまたはAll In One WP Securityのような信頼できるプラグインを1つインストールしてください。これらのツールは、ログイン保護、ファイル変更の検知、ログ記録機能を追加し、ブルートフォース攻撃を含む多くの一般的な悪意あるアクティビティをブロックできます。

WordPressセキュリティプラグインをインストールするには、以下の手順に従ってください:

  • プラグイン」→「新規追加」に移動します。
  • セキュリティプラグインを検索します。
  • 今すぐインストール」をクリックし、続いて「有効化」をクリックします。
  • 左側のサイドバーからプラグインを開き、セットアップウィザードがある場合はそれを実行します。

設定のヒント:

  • 競合や重複を避けるため、セキュリティプラグインは1つだけ使用してください。
  • 使用しない機能、特にアクセスが集中しているサイトでの負荷の高いスキャンはオフにしてください。
  • ホスティングサービスでレート制限やブロック機能を提供している場合は、可能な限り、ブルートフォース攻撃対策としてそれらを活用してください。

トラブルシューティング:

  • WordPressの管理画面にアクセスできなくなった場合は、まずファイアウォールのルールを確認し、厳格モードを緩和してください。
  • 自チームのアクセスを遮断しないよう、自身のIPアドレスをホワイトリストに登録してください。
  • 保護機能を無効にする前にログを確認し、何がブロックを引き起こしたのかを確認してください。

ファイアウォールとマルウェアスキャンの活用 {#use-a-firewall-and-malware-scanning}

ファイアウォールは、攻撃がWordPressに到達する前に阻止します。その後、マルウェアスキャンがファイルやデータベースの改ざんをチェックします。

サーバーの設定を管理できない場合は、ホスティングプロバイダのファイアウォールダッシュボード、またはWordfenceやSucuriなどのセキュリティプラグインを使用して、ログインのレート制限を行い、XML-RPCを制限またはブロックしてください。**

ファイアウォールの設定

多層防御を採用してください。エッジ側でのWAF、不正なトラフィックに対するサーバー側のルール、そしてクリーンアップのためのマルウェアスキャンです。

Firewall setup

マネージドプラットフォームでは、IPや国をブロックする組み込みのWebアプリケーションファイアウォール(WAF)を有効にできます。例えば、Cloudwaysでは、エッジフィルタリングやボット対策のためのオプションのCloudflare Enterpriseアドオンを提供しています。

マルウェアスキャン

予期しないファイルの変更やデータベースへのインジェクション(スパムリンク、隠しスクリプト)をスキャンします。

以下の項目について定期的なチェックをスケジュールします:

  • wp-content/uploads 内のファイルの変更および未知の PHP
  • データベースへのスパムやコードの注入
  • 不審なcronジョブや外部への接続

Cloudwaysは、Imunify360を搭載したマルウェア保護アドオンを提供しており、サーバーレベルのスキャンと自動クリーンアップが可能です。

WordPressからマルウェアを駆除するには、以下の手順に従ってください:

  • メンテナンスモードを有効にしてください。
  • 侵入経路を特定してください(脆弱なプラグイン、脆弱な認証情報など)。
  • すべてのシークレット(管理者/DBパスワード、ソルト、SSHキー)を更新する。
  • クリーンなバックアップから復元する。
  • 本番環境に戻す前に根本原因を修正する。

高度な技術的強化{#advanced-technical-hardening}

高度な技術的強化とは、WordPressの設定を基本レベルを超えて強化することです。これらの手順は、設定、サーバー制御、およびアクセスポリシーに焦点を当てており、ログインやプラグインが侵害された場合のリスクを低減し、被害を最小限に抑えます。

wp-config.php ファイルの保護 {#secure-the-wp-config-php-file}

wp-config.phpファイルには、データベースの認証情報とシークレットキーが含まれています。これを鍵の保管庫のように扱ってください。

次のコマンドを使用して、厳格な権限を設定します:

chmod 400 wp-config.php

これにより、他のユーザーやプロセスがファイルを読み取ったり変更したりすることを防ぎます。Webサーバーにグループの読み取りアクセス権が必要な場合は、440を使用してください。

400 設定でサイトが正常に動作しない場合は、440 に変更し、グループの所有権がウェブサーバーの実行ユーザーと一致していることを確認してください。

さらにセキュリティを強化するために、環境が許す場合は、wp-config.php を Web ルートの 1 つ上の階層に移動してください。WordPress は引き続き自動的に読み込みます。

ユーザーロールと権限を制限する {#limit-user-roles-and-permissions}

ユーザーには必要な権限のみを割り当ててください(最小権限の原則)。これにより、ハッキングされたアカウントがサイト全体を乗っ取るのを防ぐことができます。

WordPressでユーザーロールと権限を制限するには、以下の手順に従ってください:

  • ユーザー」→「すべてのユーザー」に移動します。
  • 確認したいユーザーをクリックします。
  • ロール」ドロップダウンから、そのユーザーに必要な最も低いロール(たとえば、購読者寄稿者著者編集者など)を選択します。
  • ユーザーの更新」をクリックします。

管理者権限を持つすべてのアカウントに対してこの手順を繰り返し、必要のないユーザーは権限を降格させてください。誰も使用していない休止中のアカウントは削除または無効化してください。

特別なアクセス権が必要な場合は、カスタムロールを使用し、権限を割り当てる前にその内容を確認してください。四半期ごとにロールの監査を行い、不要な管理者権限を削除してください。これにより、攻撃者が盗んだログイン情報で実行できる操作を制限できます。

ダッシュボードからのファイル編集を無効にする {#disable-file-editing-from-the-dashboard}

組み込みのテーマおよびプラグインエディタを無効化します。これにより、侵害された管理者アカウントがサイトのファイルに悪意のあるコードを簡単に挿入できなくなります。

WordPressダッシュボードからのファイル編集を無効にするには、以下の手順に従ってください:

  • SFTP またはホスティングサービスのファイルマネージャーを使用してサイトに接続します。
  • WordPressのルートディレクトリにある wp-config.php を編集し、以下を追加します:
  • ファイルを保存します。
  • WordPress 管理画面の「外観」を確認してください。「テーマエディタ」が消えています。「プラグインエディタ」も消えています。

チームがダッシュボードでの編集に依存している場合は、そのワークフローをGitベースのデプロイ、またはアクセス権を制限したアカウントを使用したSFTPに移行してください。

XML-RPCを無効にする {#disable-xml-rpc}

XML-RPCは、ブルートフォース攻撃やピンバックの悪用によく利用される侵入経路です。WordPressまたはサーバーレベルでこれをブロックしてください。

オプションA:WordPress内で無効化する

  • functions.php またはカスタムプラグインに以下を追加します:
  • ファイルを保存します。
  • ブラウザで https://yourdomain.com/xmlrpc.php にアクセスし、xmlrpc.php エンドポイントを開きます。 一般的な XML-RPC メッセージが表示されますが、XML-RPC リクエストは機能しなくなります。

これにより、WordPress レイヤーで XML-RPC が無効化されます。xmlrpc.php エンドポイントへのアクセスは依然として可能であるため、完全な保護と負荷軽減のためには、Web サーバーまたは WAF でブロックしてください。

オプションB:Webサーバー層でのブロック**

サーバー側でXML-RPCをブロックすることは、PHPが実行される前にリクエストを阻止できるため、最も強力な対策です。

Nginx:

  • サイトのドメインに対応する Nginx 設定ファイルを開きます。
  • サーバーブロック内に xmlrpc.php 用のルールを追加します。
  • Nginxを再読み込みします。

Apache:

  • 許可されている場合は、サイトの Apache 設定ファイルまたは .htaccess を編集します。
  • xmlrpc.php 用のブロックルールを追加します。
  • Apacheを再読み込みします。

これにより、リクエストがWordPressに到達するのを完全に阻止できるため、負荷が軽減され、一般的なXML-RPC攻撃経路が遮断されます。

注:JetpackプラグインやWordPressモバイルアプリでXML-RPCが必要な場合は、完全にブロックしないでください。代わりに、リクエストにレート制限を設け、可能であれば信頼できるIPからのアクセスのみを許可するようにしてください。

バックアップと監視{#backups-and-monitoring}

障害に備えましょう。バックアップがあれば迅速に復旧できます。モニタリングにより、何が変更されたかがわかります。

ウェブサイトを定期的にバックアップする {#back-up-your-website-regularly}

バックアップは任意ではありません。アップデートによって本番環境が破損したり、プラグインが侵害されたり、誤ったデプロイによってデータベースが破壊されたりした際の、緊急脱出手段となります。

ここで重要なのは、何が欠落しているかを推測することなく、迅速に復元できるサイトのクリーンなコピーを保持することです。

手動バックアップ

WordPressサイトをバックアップするには、以下の手順に従ってください:

  • プラグイン」→「新規追加」からバックアッププラグインをインストールし、有効化します。
  • プラグインを開き、ファイルとデータベースを選択した状態で「今すぐバックアップ」を実行します。
  • 可能であれば、オフサイトのストレージに保存してください。

自動バックアップ

ほとんどのマネージドWordPressホスティングサービスでは、デフォルトで自動バックアップ機能が含まれています。通常、毎日バックアップが実行され、一定期間保存され、ホスティングダッシュボードからワンクリックで復元できる復元ポイントとして利用可能です。

Automated backup

サイトの変更頻度に合わせてスケジュールを選択してください。

  • 毎日:頻繁に更新、コメント、注文があるアクティブなサイト向け。
  • 毎週:変更の少ないマーケティングサイト向け。
  • 月次:** **コンテンツの変更がほとんどない場合。

フルバックアップには、データベース、wp-contentフォルダ(特にuploadsフォルダ)、および設定ファイルが含まれます(設定により自動的に再作成されない場合)。

ベストプラクティス:

  • バックアップはオフサイトに保存してください。サーバー障害が発生しても、バックアップが消去されることはありません。
  • 最新のスナップショットだけでなく、複数の復元ポイントを保持してください。
  • 復元テストを定期的に実施してください。テストされていないバックアップは信頼性が保証されていません。いざという時に機能することを願うだけでは不十分です。

復元処理が遅延したり失敗したりする場合は、バックアップデータが肥大化していることが原因であることが多いです。バックアップサイズの増加を確認してください。これは、wp-content内のログファイルやキャッシュディレクトリが原因であることがよくあります。プラットフォーム上で安全に再生成できる場合は、バックアップからキャッシュディレクトリを除外してください。

サイトの監視 {#monitor-your-site}

セキュリティ強化は有効ですが、監視によって見逃された問題も捕捉できます。問題を早期に発見しましょう。何が起きたかを追跡できるよう、ログを準備しておいてください。

稼働時間の監視

稼働状況のチェックを行うことで、サイトのダウンや、ホームページのハッキング、PHPの動作を妨げるアップデート、サーバーに過負荷をかける攻撃など、サイトが正常に機能しなくなった場合や悪影響を受けた場合に、その兆候をいち早く察知することができます。

UptimeRobot(充実した無料プランあり)やPingdomなどの稼働状況確認ツールは、ホームページや主要ページに対するHTTPチェックやキーワードチェックを処理します。

実用的な設定:

  • ホームページと、ログインせずにアクセスできる重要なページ(価格表、チェックアウトページ、メインのランディングページなど)を監視してください。
  • HTTPステータスチェックとキーワードチェックの両方を使用し、ハッキングされていても通常通りの200レスポンスを返すページが見逃されないようにします。

セキュリティアラート

アカウントの乗っ取り、改ざん、または不正な動作を示すイベントに対してアラートを設定します。

WordfenceやSucuriなどのセキュリティプラグインは、ログイン数の急増、ファイルの変更、新しい管理者ユーザーの追加などを通知します。

WordPressでアラートを設定するには、以下の手順に従ってください:

  • プラグイン」→「新規追加」に進みます。
  • アラート機能を備えたセキュリティプラグインをインストールして有効化してください。
  • 左側のサイドバーからプラグインを開きます。
  • プラグインの設定で「アラート」または「通知」を探します。
  • 以下の項目についてアラートを有効にします:
    • 新しい管理者ユーザーの作成
    • プラグインまたはテーマファイルの変更
    • ログインの急増または繰り返し失敗
    • 重要なプラグインの更新が利用可能
    • DNSまたはSSL証明書の問題
  • 重要なアラートはSlackやPagerDutyに転送し、優先度の低い通知はメールで受け取るようにします。

アクティビティログ

インシデント発生時、ログは「何が変更されたか、いつ変更されたか、誰が変更したか、どこから変更されたか」という、最も重要な質問に答えてくれます。

設定手順:

  • ユーザー作成、プラグインのインストール、設定変更などの管理者の操作をログに記録する。
  • 侵害の兆候が徐々に現れるケースを調査できるよう、ログを十分な期間保存してください。
  • アクティビティログとサーバーアクセスログを照合し、IPアドレスとユーザーエージェントを関連付けられるようにする。

WordPressでアクティビティログを有効にするには、以下の手順に従ってください:

  • プラグイン」→「新規追加」に移動します。
  • アクティビティログプラグインをインストールして有効にします。
  • 左側のサイドバーからプラグインを開きます。
  • ユーザー作成、プラグインのインストール、設定の変更など、管理者による操作のログ記録を有効にします。
  • ログの保存期間を設定し、保存します。
  • 可能であれば、ログのエクスポートや外部ストレージへの転送を有効にします。

ログが急速に増えすぎる場合は、後で必要になる重要な情報を失わない範囲で、ログの量を減らしてください。

  • 重要度の低いイベントについては、詳細レベルを下げます。
  • ログを積極的にローテーションします。
  • 利用可能な場合は、外部ログストレージにオフロードします。

まとめ {#final-thoughts}

WordPressのセキュリティは、たいてい単純な理由で破られます。更新の遅れ、脆弱なパスワード、あるいは管理者権限の過剰付与といった小さな穴が、長期間放置されてしまうのです。

もし一つだけ対策を行うなら、それは「継続性」です。WordPressのコア、テーマ、プラグインを定期的に更新してください。管理者アカウントには2段階認証(2FA)を適用しましょう。長くユニークなパスワードを使用し、分かりやすいユーザー名は避けてください。すべてのページでHTTPSを維持し、ログイン情報、セッション、フォームデータが常に暗号化されるようにします。

基本対策が整ったら、さらなる保護を追加しましょう。ファイアウォールを使用して、悪意のあるトラフィックがサイトに到達する前にブロックします。マルウェアスキャンとファイル変更監視を実行し、問題を早期に発見できるようにします。バックアップはオフサイトに保管し、複数の復元ポイントを保持し、復元テストを行って、復旧プロセスを確実なものにします。

これらを実装することで、WordPressサイトは攻撃を受けにくくなり、監視しやすくなり、万が一のトラブル発生時にも迅速に復旧できるようになります。

よくある質問 {#frequently-asked-questions}

1. WordPressは安全ですか?

はい、基本的な対策を守ればWordPressは安全です。具体的には、コア、テーマ、プラグインを常に最新の状態に保つこと、管理者用には強固で固有のパスワードと2段階認証(2FA)を使用すること、分離機能とファイアウォールを備えたホスティングサービスを選択すること、そして定期的なバックアップを実行することです。

2. WordPressにはセキュリティ機能が組み込まれていますか?

はい。WordPressのコアには、ロールや権限、管理者操作の保護、安全なパスワードハッシュ化、定期的なセキュリティリリースといった堅牢な基本機能が備わっています。実際の侵害のほとんどは、更新されていないプラグインやテーマ、脆弱な認証情報、または設定ミスのあるサーバーに起因しており、更新が維持されているデフォルトのコアインストールによるものではありません。

Ranktrackerの紹介

効果的なSEOのためのオールインワン・プラットフォーム

ビジネスが成功する背景には、強力なSEOキャンペーンがあります。しかし、数え切れないほどの最適化ツールやテクニックがあるため、どこから手をつければいいのかわからないこともあります。でも、もう心配はありません。効果的なSEOのためのオールインワンプラットフォーム「Ranktracker」を紹介します。

Ranktrackerの登録がついに無料になりました。

無料アカウント作成

または認証情報を使ってサインインする

3. 自分のWordPressサイトはハッキングされたのでしょうか?

予期せぬリダイレクト、自分が作成していない新しい管理者ユーザー、デプロイなしでのテーマやプラグインファイルの変更、不審なスケジュールされたタスク、急激なログイン数の増加など、明らかな危険信号に注意してください。セキュリティプラグインのログやサーバーのアクセスログを確認しましょう。Google Search Consoleを使用している場合は、警告や見覚えのないインデックス登録されたURLがないか確認してください。

4. WordPressサイトをHTTPSにするにはどうすればよいですか?

ホスティングのダッシュボードでSSL証明書をインストールしてください。その後、WordPressのホームURLとサイトURLをHTTPSに更新し、管理画面とフロントエンドでHTTPSを強制適用します。混合コンテンツの警告が表示される場合は、データベースやテーマのアセット内にハードコードされたHTTPリンクを置き換えてください。プロキシやロードバランサーを使用している場合は、リダイレクトループを回避するために、WordPressが元のリクエストをHTTPSとして認識するように設定してください。

Felix Rose-Collins

Felix Rose-Collins

Ranktracker's CEO/CMO & Co-founder

Felix Rose-Collins is the Co-founder and CEO/CMO of Ranktracker. With over 15 years of SEO experience, he has single-handedly scaled the Ranktracker site to over 500,000 monthly visits, with 390,000 of these stemming from organic searches each month.

Ranktrackerを無料で使いましょう。

あなたのWebサイトのランキングを妨げている原因を突き止めます。

無料アカウント作成

または認証情報を使ってサインインする

Different views of Ranktracker app