WordPressはウェブサイトの43.6%以上を稼働している強力なCMS(コンテンツ管理システム)ですが、それゆえにサイバー攻撃の標的になりがちです。特に何千ものプラグインやテーマが存在することから脆弱性は常に発見され、悪用されています。

2023年のSucuriによる調査によれば、マルウェア感染が検出されたサイトのうち95.5%がWordPressサイトであり、2017年の83%から大幅に増加しています。Joomla(1.7%)やMagento(0.6%)のような他のCMSにもセキュリティリスクは見られますが、WordPressはその使用率と攻撃総数の両方で圧倒しています。

WordPressのセキュリティ脆弱性
WordPressのセキュリティ脆弱性

その大きな原因は、WordPressコアを最新バージョンに更新していなかったことにあります。以下はSucuriの同調査によるデータです。

  • ハッキングの被害に遭った39.1%のCMSサイトは古くなったコアバージョンを使用していた。
  • ハッキングの被害に遭った13.97%のサイトには脆弱なプラグインまたはテーマが少なくとも1つインストールされていた。
  • ハッキングの被害に遭った49.21%のサイトには、クリーンアップ後も悪用される不正プラグインや管理者アカウントへのバックドアがあった。

このような状況を受け、WordPressは近年大幅に改善されており、自動更新のような機能はCMS自体の脆弱性を削減するのに役立っています。しかし、不正プラグイン、安全でないパスワード、古くなったテーマの使用など、セキュリティ対策が十分でない場合は、依然としてサイトを危険に晒すことになります。

WordPress Securityの開発者向けドキュメントでは、以下のように述べられています(英語原文の日本語訳)。

セキュリティとは、完璧に安全なシステムではありません。それを維持することは時に現実的ではなく、不可能であることがあります。セキュリティとはリスクを排除することではなく、リスクを減らすことであり、合理的な範囲で実現可能な対策を採用し、全体的な態勢を改善し、サイバー攻撃などの標的になる確率を減らすことを意味します

このことを踏まえると、真の課題はいかにセキュリティリスクを回避するかにあります。100%安全なシステムを構築することは不可能ですが、例えば優れたサーバーを利用することで、サイトを効果的に保護することができます。

今回は、WordPressサイトのセキュリティを強化し、ハッキングの標的となるのを防ぐ効果的な方法をご紹介します。

1. 安全なWordPress向けサーバーに投資する

安全なWordPressサイトは安全なサーバーから始まります。どれほど多くのセキュリティプラグインをインストールしても、どれほど慎重に更新作業を行なっても、サーバー環境が脆弱であればサイトは危険に晒されてしまいます。

多くのサイト所有者は、WordPress自体の守りばかりに目を向けがちですが、サイトを稼働しているサーバーはよく見落とされます。

劣悪なサーバー環境では、DDoS攻撃マルウェア感染、脆弱なファイアウォール、古いサーバーソフトウェアにさらされ、ハッカーの格好の標的になります。セキュリティを重視するサーバーは、悪意のあるトラフィックを積極的にブロックし、脅威をスキャンし、セキュリティパッチを自動的に適用してくれるため、セキュリティの負担を大幅に軽減してくれます。

優れたサーバーは通常、以下を提供してくれます。

  • 有害なトラフィックがサイトに到達する前にブロックするエンタープライズレベルグのファイアウォールとDDoS攻撃対策
  • マルウェアのスキャンと除去を自動化し、感染が拡大する前に対処
  • 安全な隔離コンテナにより、他のサイトが危険にさらされても他のサイトには影響を与えない
  • ソフトウェアの自動更新とパッチ適用により、サーバー環境を常に最新の状態に保つ
  • 毎日のバックアップとロールバック機能で万が一の事態が発生しても速やかにサイトを復元できる

WordPressサイトのハッキングのほとんどは、巧妙な手口によって起こるものではなく、古くなったプラグイン、脆弱なパスワード、サーバーのセキュリティの甘さなどが原因です。また悪意のあるユーザーは、サイトの弱点を探る際にサーバーから確認することもあります。

Kinstaのインフラに組み込まれたセキュリティ

Kinstaのプラットフォームは、サイトがデプロイされた瞬間から悪意のあるトラフィックをブロックし、ブルートフォース攻撃を阻止します。コアソフトウェアは常に最新の状態に保たれ、バックグラウンドで静かに動作するエンタープライズレベルのセキュリティ対策の恩恵を受けることができます。

各サイトはLinuxのコンテナ技術により完全に隔離されるため、1つのサイトが攻撃を受けても他のサイトに影響を及ぼすことはありません。このレベルの分離は、1つのサーバー上で複数のサイトがリソースを共有する一般的な共用サーバーではほぼ見られません。

KinstaのWordPress専用クラウドサーバーのアーキテクチャ
KinstaのWordPress専用クラウドサーバーのアーキテクチャ

上のホスティングアーキテクチャに示すとおり、すべてのサイトはGoogle Cloudのプレミアムティアネットワーク上で実行され、GmailやGoogle 検索などのサービスを保護するGoogleの15年以上にわたるセキュリティイノベーションの恩恵を受けることができます。

以上に加えて、以下のようなセキュリティ機能も標準搭載されています。

Kinstaにとってセキュリティとは、脅威への対策と対処だけでなく、WordPressサイトの所有者がマルウェア、DDoS攻撃、サーバーの脆弱性などを心配することなく、本業とその成長に集中できることを意味します。

2. 最新のPHPバージョンを使用する

PHPはWordPressサイトの中核であるため、セキュリティ、パフォーマンス、および安定性の確保には、PHPの最新バージョンを使用することが不可決です。

PHPの各メジャーリリースは2年間の公式サポートを受け、その間にセキュリティの脆弱性やバグが定期的に修正されます。このサポート期間が終了すると、更新が行われなくなり、セキュリティ上の欠陥にさらされることになります。

PHPバージョンのサポート状況
PHPバージョンのサポート状況

しかし、多くのWordPressサイトで古いバージョンが使用されているという現状があります。WordPressの公式統計によると、WordPressサイトの49.4%でしかPHP 8.1以上が使用されていません。つまり、全体の半数以上のサイトが、サポートが終了したPHPバージョンで稼働していることになります。2022年末にセキュリティサポートが終了したPHP 7.4は、現在も31%のWordPressサイトで使われているから驚きです。この事実は、セキュリティの観点から非常に心配なデータです。

WordPress PHPバージョンの統計
WordPress PHPバージョンの統計

サイトで使用しているPHPバージョンがわからない場合は、サーバーのコントロールパネルか、WordPress管理画面の「ツール」>「サイトヘルス」の「情報」タブで確認することができます。

WordPressサイトのPHPバージョンを確認
WordPressサイトのPHPバージョンを確認

Kinstaでは、適切なセキュリティとパフォーマンスを考慮するのであれば、PHP 8.1以上を使用することを強くおすすめしていますが、WordPressユーザーの大部分(約40.4%)が現在もPHP 7.4や8.0のような古いバージョンを使用しているという状況を考慮し、これらのバージョンを引き続きサポートしながら、最新バージョンへの移行を奨励しています。

PHPバージョンの変更は簡単で、専用コントロールパネルMyKinstaにログインし、「WordPressサイト」>(サイト名)>「ツール」に移動して、「PHP設定」セクションの「変更する」をクリックするだけでOKです。

KinstaでPHPバージョンを変更
KinstaでPHPバージョンを変更

また、PHPの自動バージョンアップも設定可能で、使用しているPHPバージョンの公式サポートが終了すると、自動的に新しいバージョンに更新されます。これにより、手間をかけることなく、サイトを安全かつパフォーマンスに最適化された状態を保つことができます。

PHPの自動バージョンアップを設定することも
PHPの自動バージョンアップを設定することも

cPanelを採用するサーバーでは通常、「ソフトウェア」カテゴリにある「PHP Selector(PHPバージョンの選択)」からPHPバージョンを変更することができます。

cPanelでPHPバージョンを変更
cPanelでPHPバージョンを変更

3. WordPress、プラグイン、テーマを常に最新バージョンに保つ

WordPressサイトのセキュリティを強化するもう1つの重要な対策は、WordPressコア、プラグイン、テーマ(WordPressリポジトリで入手できるものと有料のもの両方)を常に最新の状態に保つことです。

これらのアップデートは新機能に関するものだけでなく、悪用される前に脆弱性を修正する重要なセキュリティパッチもよく含まれています。

以前は、更新が必ずしも予定通りに適用されなかったことから、WordPressのコアソフトウェアはより多くのセキュリティ脅威に直面していました。バージョン3.7のリリースからは、セキュリティやメンテナンスアップデートを含むマイナーリリースの自動更新機能を導入し、セキュリティの改善が行われています。

WordPress管理画面の更新ページ
WordPress管理画面の更新ページ

これにより、古くなったWordPressバージョンの脆弱性を利用した攻撃は大幅に減りましたが、今度はプラグインとテーマが大きな攻撃対象となっています。

Patchstackによると、2023年に新たに検出されたWordPressの脆弱性の96.77%はプラグインによるものでした。テーマはわずか3.01%、WordPressコアの脆弱性は1%未満にとどまりました。

PatchStackの2023年WordPress脆弱性レポート
PatchStackの2023年WordPress脆弱性レポート

このことから、真のセキュリティリスクはWordPress自体ではなく、その機能を拡張するサードパーティのプラグインやテーマにあることがわかります。

プラグインを更新せずに放置していると、リスクはさらに大きくなります。2023年、WordPressチームはPatchstackから827個の脆弱なプラグインとテーマが存在することの報告を受け、放置された481のプラグインとテーマを削除しています。これは、147個にフラグが立てられ87個が削除された2022年と比較すると、450%増です。

つまり、何千ものWordPressサイトが更新されなくなったプラグインを使用しており、それが攻撃者の格好の標的になっていることになります。

PatchStackの脆弱なプラグインに関するレポート
PatchStackの脆弱なプラグインに関するレポート

プラグインとテーマはWordPressサイトで見られる脆弱性の最大の原因であることから、これらを常に更新し続けるが非常に重要です。しかし、特に大規模なサイトで多数のプラグインとテーマを使用している場合、更新作業を手動で行うことは大きな負担になります。

Kinstaでは、この課題を考慮し、Kinsta自動アップデートをリリースしました。有効・無効にかかわらずインストールされているすべてのプラグインとテーマを毎日(または曜日を指定して)自動更新し、一切の手間をかけずに脆弱性からサイトを確実に保護することができます。

Kinsta自動アップデートの詳細情報
Kinsta自動アップデートの詳細情報

また、更新後に予期せぬ問題が発生することを防ぐため、ビジュアルリグレッションテストを実行します。更新前後のページのスクリーンショットを取得して比較し、重要な変更を検出します。Kinsta自動アップデートの詳細はこちらをご覧ください。

更新を手動で管理したい場合は、MyKinstaまたはWordPress管理画面の更新ページで実行できます。後者の場合は、左サイドバーから「更新」をクリックし、該当のプラグインを選択して「プラグインを更新」をクリックします。

WordPress管理画面でプラグインを更新
WordPress管理画面でプラグインを更新

また、使用するプラグインを厳選することも重要です。Patchstackによれば、WordPressリポジトリの多くのプラグインはメンテナンスが十分に行われていません。

プラグインをインストールする前に、最終更新日をチェックし、ユーザーレビューに必ず目を通しましょう。長い間更新されていなかったり、評価が低かったりする場合は、信頼できる別のプラグインを探すのがベストです。

更新が行われていないプラグイン例
更新が行われていないプラグイン例

上のプラグインは3年更新されておらず、潜在的なリスクを見つけやすいよう、ページ上部にも警告メッセージが表示されています。

WordPressに関するセキュリティ情報を追うには、WordPressのコア、プラグイン、テーマの1万以上の脆弱性を追跡するWPScanや、セキュリティ関連のすべての変更をログに記録するOfficial WordPress Security Archiveのようなリソースが役立ちます。

WordPressコア、プラグイン、テーマを常に更新し、信頼できる更新システムを使用しながら、慎重にプラグインを選択することで、サイトのセキュリティリスクを劇的に減らすことができます。

4. WordPressのバージョンを隠す

WordPressのバージョンを隠すことも、潜在的なセキュリティリスクを減らす効果的な方法です。古いバージョンのWordPressを使用していることがハッカーに見つかれば、攻撃の標的にされる可能性が高くなります。

WordPressはデフォルトでサイトのHTMLソースコードにバージョン番号を表示します。

WordPressバージョン
WordPressバージョン

もちろん、WordPressを常に更新した状態にするのがベストですが、テーマのfunctions.phpファイルに以下のスニペットを追加することで、ソースコードからバージョン番号を削除することができます。

function wp_version_remove_version() {
    return '';
}
add_filter('the_generator', 'wp_version_remove_version');

より簡単な解決策として、Perfmattersをインストールすれば、ワンクリックでWordPressのバージョンを非表示にできます。その他パフォーマンスやセキュリティの最適化も行えるため便利なプラグインです。

5. WordPress管理画面の保護を強化する

確実な解決策というわけではありませんが、悪意あるユーザーがWordPressサイトへのログインページを見つけにくくすることで、ブルートフォース攻撃や悪意のあるボットによる攻撃を減らすことができます。

WordPressのデフォルトのログインページはwp-adminであり、これはハッカーの間でも周知の事実です。ハッカーが管理画面にアクセスできれば、マルウェアの注入やファイルの変更、あるいはロックアウトなど、完全にサイトを制御することができてしまいます。

WordPress管理画面の保護を強化することで、セキュリティのレイヤーが追加され、たとえ他の場所に脆弱性があったとしても、攻撃者がサイトにアクセスできないようにすることができます。

WordPress管理画面を保護するには、以下を実践してください。

  • デフォルトのログインURLを変更して、簡単に見つけられないようにする
  • ブルートフォース攻撃を阻止するためにログイン試行を制限する
  • ログインページを読み込む前に、ユーザー名とパスワードを要求するHTTP認証を追加する
  • ファイアウォールやウェブサーバーのルールを使って管理者アクセスを特定のIPに制限する

これらの対策を組み合わせることで、不正なログインを防ぎ、管理画面が悪用されるリスクを減らすことができます。以下、1つずつ見ていきましょう。

WordPressのログインURLを変更する

WordPressサイトへのログインURLは、デフォルトでdomain.com/wp-adminまたはdomain.com/wp-login.phpになります。ハッカーやボットは常にサイトをスキャンしながら、攻撃を行うためのログインページを探しています。

ログインURLを変更したからといって、サイトが完全に安全になるわけではありませんが、攻撃の標的になりにくくなり、特に自動化されている攻撃を劇的に減らすことができます。

ログインURLを変更するには、WPS Hide Loginのような無料プラグイン、またはPerfmattersなどを使用できます。独自のログインパスを設定することで、他の人は管理者ログインページを見つけにくくなります。ボットに推測されにくい一意のURLを設定してください。

ログインの試行を制限する

ログインURLを隠したとしても、攻撃者はブルートフォース攻撃(正しいパスワードを見つけるまで何千ものユーザー名とパスワードの組み合わせを試す攻撃)でパスワードを推測しようとするかもしれません。WordPressでは、ログイン試行の回数に制限を設けていないため、無限に試行され続けてしまう可能性があります。

IPアドレスが一時的にブロックされるまでのログイン試行回数を制限することで、このような攻撃を回避することができます。これには、Limit Login Attempts Reloadedがおすすめです。ブロックする期間とログイン試行回数を設定し、IPアドレスの許可リストまたはブロックリスト登録も可能です。

Limit Login Attempts Reloaded
Limit Login Attempts Reloaded

また別の選択肢として、Login Lockdown & Protectionは、失敗したログイン試行のIPアドレスとタイムスタンプを記録し、短期間に試行回数が多すぎる場合にアクセスをブロックしてくれます。正当なユーザーが簡単にブロックされないようにしながら、自動化された攻撃を防ぐのに便利です。

Login Lockdown & Protectionの設定
Login Lockdown & Protectionの設定

HTTP認証の追加によるセキュリティの強化

ログインページを保護するもう1つの効果的な方法は、誰かがアクセスする前にパスワード保護のレイヤーを追加することです。これにより、WordPressのログインページを表示する前に、ユーザー名とパスワードの入力が必要になります。

HTTP認証
HTTP認証

この方法は非常に効果的ですが、ユーザーが頻繁にログインする必要があるECサイトや会員制サイトには向きません。しかし、ブログや企業サイト、個人プロジェクトなどでは、不正ログインの試行を大幅に減らすことができます。

多くのサーバーは、組み込みでこの機能を提供しています。Kinstaでは、MyKinstaの各サイトの「ツール」画面から「パスワード保護」機能を利用できます。

MyKinstaのパスワード保護機能
MyKinstaのパスワード保護機能

数回のクリックでHTTP認証を有効にし、WordPressのログインページにアクセスする前にユーザー名とパスワードの入力を要求するようにします。

Apacheサーバーを利用している場合、.htpasswdファイルを作成して設定できます。このジェネレーターツールを使って、以下のようにwp-adminフォルダ下のディレクトリにファイルをアップロードします。

home/user/.htpasswds/public_html/wp-admin/htpasswd/

続いて、以下のコードで.htaccessファイルを作成し、/wp-admin/ディレクトリにアップロードします。ディレクトリのパスとユーザー名は必ず変更してください。

AuthName "Admins Only"
AuthUserFile /home/yourdirectory/.htpasswds/public_html/wp-admin/htpasswd
AuthType basic
require user yourusername

この方法の懸念点として、サイトのフロントエンドのAJAX(admin-ajax)が壊れてしまうことがあります。サードパーティプラグインの中には、これを必要とするものがあるため、上記の.htaccessファイルに以下のコードも追加する必要があります。

<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>

Nginxを使用している場合は、HTTPのBasic認証でアクセスを制限することも可能です。

IPアドレスによる管理者アクセスの制限

WordPressのログインページを標的に、何千ものパスワードの組み合わせを試すブルートフォース攻撃ですが、ログインページに到達できなければ、そもそも攻撃を仕掛けることができません。

したがって、特定のIPアドレスへのアクセスを制限するのが効果的です。承認された場所からのユーザーのみがログイン可能になり、それ以外のユーザーは、たとえ正しい認証情報を持っていたとしてもブロックされます。

Cloudflareのようなウェブアプリケーションファイアウォール(WAF)を使用している場合、ゾーンロックダウン機能/wp-admin//wp-login.php/へのアクセスを承認されたIPアドレスのみに制限することができます。

Cloudflareのゾーンロックダウンルール
Cloudflareのゾーンロックダウンルール

しかしCloudflareは現在、より柔軟性の高いカスタムWAFルールの使用を推奨しています。

CloudflareのカスタムWAFルール
CloudflareのカスタムWAFルール

Sucuriを使用している場合、IPが許可リストに登録されていない限り、ファイアウォールは自動的に管理画面へのアクセスを制限します。ブロックされている場合、Sucuriのダッシュボードから現在のIPアドレスを許可リストに追加可能です。

自社でサーバーを管理していて、静的IPアドレスを持っている場合は、.htaccess(Apache)またはNginxの設定ファイルで、許可IPを指定してアクセスを制限することができます。ただし、これは頻繁にネットワークを変更しない場合にのみ実用的です。

先に触れたとおり、この方法は複数のユーザーがバックエンドに頻繁にアクセスすることになるECサイトや会員制サイトには不向きです。IPでアクセスをブロックすると、正当な顧客やチームメンバーがアカウントを管理できなくなる可能性があるため、二要素認証(2FA)や強力なパスワードポリシーなど、他のセキュリティ対策を導入することをおすすめします。

6. 強固なユーザー名とパスワードを使用する

ありふれた認証情報は、攻撃者にとって格好の標的となります。毎年、何百万人ものユーザーが「123456」「password」「qwerty」などのパスワードを使用していることがセキュリティレポートで報告されています。悪意のあるユーザーはこれを利用し、自動化したスクリプトを使用してログイン認証情報を迅速に推測するブルートフォース攻撃を仕掛けています。

サイトを守るには、大文字、小文字、数字、記号を組み合わせた長くて複雑なパスワードを常に設定してください。パスワードの管理は、パスワードを提案し安全に保存してくれるGoogle パスワード マネージャーのようなツールを使えば簡素化されます。

Google パスワード マネージャー
Google パスワード マネージャー

KinstaではWordPressサイトを追加する際、フィールドの右側にある丸くなった矢印のアイコンをクリックすると、強力なパスワードを自動生成することができます。1PasswordLastPassのようなパスワードマネージャーに安全に保存することで、異なるサイト間でパスワードをサイトする必要もなくなります。

MyKinstaでパスワードを自動生成
MyKinstaでパスワードを自動生成

また忘れてはならないのは、デフォルトのユーザー名「admin」を避けることです。ブルートフォース攻撃では、頻繁にこのユーザー名が狙われています。「admin」を削除して一意の管理者ユーザー名を設定してください。これを実行するには、WordPress管理画面の「ユーザー」>「新規ユーザーを追加」に移動します。

新規ユーザーを設定したら、古いものを削除し、新規管理者アカウントにコンテンツを割り当て直します。

データベースを直接管理している場合は、phpMyAdminで以下のコマンドを使って管理者ユーザー名を変更できます(変更前には必ずデータベースのバックアップを作成してください)。

UPDATE wp_users SET user_login = 'newcomplexadminuser' WHERE user_login = 'admin';

7. 二要素認証(2FA)を有効にする

どんなに強力なパスワードを設定しても、盗まれたり推測されたりするリスクはゼロではありません。二要素認証(2FA)は、アクセスを許可する前に第二の認証を要求することで、セキュリティを強化することができます。

これは通常、認証アプリ、SMSメッセージ、またはセキュリティキーによって生成された一度限りのコードの入力になります。攻撃者がパスワードと二要素認証に必要になる別のデバイスの両方にアクセスできることはほとんどないため、二要素認証を有効にすることは、不正ログインを防ぐ最も効果的な方法の1つです。

二要素認証は以下の2つで利用してください。

  • サーバーアカウント:何者かがサーバーのコントロールパネルに侵入すると、パスワードを変更したり、DNS設定を変更したり、サイトを削除したりする可能性があります。KinstaではMyKinstaで二要素認証をサポートしており、Google Authenticatorのような認証アプリからワンタイムコードを要求し、許可されたユーザーだけがアカウントにアクセスできるようになっています。
  • WordPressのログインページ:WordPressには二要素認証は組み込まれていませんが、Google AuthenticatorTwo Factor Authenticationなどのプラグインを使用して有効にすることができます。認証アプリと統合し、ログイン時にワンタイムセキュリティコードの入力を要求可能です。

一度設定すると、WordPressのログインページで追加のセキュリティコードの入力を求められるため、不正アクセスのリスクを大幅に減らすことができます。

8. SSL証明書を導入してHTTPSを使用する

WordPressサイトのセキュリティ対策として見落とされがちなのは、SSL証明書をサイトにインストールし、HTTPS(Hypertext Transfer Protocol Secure)でサイトを運営することです。

HTTPSは、ウェブサイトと訪問者の間でやり取りされるデータを暗号化し、第三者が機密情報を傍受するのを防ぐ技術です。SSL証明書はECサイトのみに必要なものと認識されることが多いですが、ログイン情報やユーザーデータを収集したり、トラフィック解析を行ったりするサイトでは、暗号化の恩恵を受けることができます。

多くのサーバーでは、Let’s Encryptなどの無料SSL証明書を提供しています。KinstaではCloudflare統合により、ワイルドカード対応のSSL証明書を無料かつ自動でインストールしており、手間なくサイトのセキュリティを強化することができます。

HTTPでサイトを運営している場合は、以下のような観点から迅速にSSL証明書を導入することをおすすめします。

  • セキュリティ:HTTPSなしでは、ログイン認証情報やユーザー情報がプレーンテキストで送信されるため、ハッカーの標的になりやすくなります。HTTPSはすべてのデータを暗号化して中間者攻撃を防ぎ、サイト上のすべてのやり取りを守ります。
  • SEOGoogleは、HTTPSの導入がランキング要因であることを公表しています。安全な接続は信頼性を示し、検索の可視性を向上させる可能性があります。
  • 信頼と信用:多くのユーザーは、安全な接続を証明する「tuneアイコン」を無意識に探します。GlobalSignの調査によると、84%の消費者が安全でない接続でデータが送信される場合に購入を断念しており、29%がサイトにアクセスする前にHTTPSを使用しているかどうかをチェックしています。
  • ブラウザの警告Google Chromeをはじめとするブラウザは、HTTPサイトを「安全でない」サイトとして警告します。Chromeでは、HTTPSに対応していないサイトにアクセスする前に警告を表示するオプション(常に安全な接続を使用する)も用意されています。
  • リファラー:HTTPトラフィックは直接のトラフィックとして誤分類されることが多いため、ソースの追跡が難しくなります。
  • パフォーマンス:HTTPSはHTTP/2を有効にし、より優れた多重化と圧縮によってサイトの速度を改善し、TLS 1.3はハンドシェイク時間を短縮することでパフォーマンスを最適化します。Kinstaではこの両方をサポートし、さらにCloudflare統合によってHTTP/3にも対応しているため、これまで以上に高速で信頼性の高い接続が保証されます。

WordPressサイトでHTTPSにリダイレクトするには、wp-config.phpファイルに以下の行を追加します。

define('FORCE_SSL_ADMIN', true);

現在もHTTPを使用している場合は、即座にHTTPSへの移行を検討してください。セキュリティ、SEO、そして訪問者の信頼のために必要不可欠なステップです。HTTPSへの移行方法はこちらをご覧ください。

9. 最新のHTTPセキュリティヘッダーを実装する

HTTPセキュリティヘッダーの実装も効果的です。サイトのコンテンツの扱い方をブラウザに指示し、XSS(クロスサイトスクリプティング)やクリックジャッキングなどの攻撃を防ぐのに役立ちます。重要なヘッダーには以下のようなものがあり、通常はウェブサーバーレベルで設定されます。

  • Content-Security-Policy (CSP):悪意のあるインジェクションを防ぐため、サイト上で読み込めるリソース(スクリプト、スタイル、画像)を制限する
  • X-XSSプロテクション:疑わしい動作をブロックすることで、クロスサイトスクリプティング攻撃を防ぐ
  • Strict-Transport-Security(HSTS):ブラウザが常にHTTPSを使用するように強制し、安全な接続を保証する
  • X-Frame-Options:サイトがiframeに埋め込まれるのを防ぎ、クリックジャッキングを防ぐ
  • X-Content-Type-Options:ブラウザのMIMEスニッフィングを無効に特定の攻撃のリスクを減らす

WordPressサイトでどのセキュリティヘッダーが有効になっているかを確認するには、Google Chromeの検証ツールを開き、「ネットワーク」タブのサイトの最初のリクエストのレスポンスヘッダーをチェックします。

Chrome検証ツールの「ネットワーク」タブ
Chrome検証ツールの「ネットワーク」タブ

または、無料のsecurityheaders.ioを使ってサイトをスキャンしても確認可能です。

10. 常に安全な接続を使用する

安全な接続を使用することはとにかく重要です。WordPressサーバーがSFTPまたはSSHを提供しているかどうかを確認してください。いずれも送信中にデータを暗号化して機密情報が傍受されるのを防ぎ、標準的なFTPよりもはるかに安全です。

Kinstaでは、お客様のデータを安全に保つためにSFTP接続のみをサポートしています。22番ポートを使用する多くのサーバーとは異なり、セキュリティ強化のため各サイトにランダムなポートを割り当てます。SFTP情報はMyKinstaで確認可能です。

KinstaのSFTPポート
KinstaのSFTPポート

サーバーのセキュリティだけでなく、ホームネットワークのセキュリティも同様に重要です。自宅のルーターが危険にさらされると、WordPressサイトに関する重要なデータが公開される可能性があります。これを防ぐには、以下の対策を講じましょう。

  • どうしても必要な場合を除いてリモート管理(VPN)を無効にする
  • 192.168.1.1 のようなデフォルトのプライベートIP範囲ではなく、10.9.8.7 のような別の範囲を使用する
  • Wi-Fiネットワークで強力な暗号化を有効にする
  • 信頼できるデバイスへのアクセスを制限するためにIPアドレスを許可リストにする
  • ルーターのファームウェアを常に最新の状態に保ち、脆弱性にパッチを適用する

また、公共ネットワークからWordPressにログインする際にも細心の注意が必要です。カフェや空港の無料Wi-Fiは安全性に欠け、簡単にトラフィックを傍受されてしまいます。公共ネットワークからサイトにアクセスしなければならない場合は、ExpressVPNNordVPNのような信頼できるVPNサービスを使って接続を暗号化し、潜在的な攻撃者からIPアドレスを隠しましょう。

11. WordPress管理画面のファイル編集を無効にする

WordPressでは、テーマファイルエディターまたはプラグインファイルエディターのいずれか使って、管理者が管理画面からテーマおよびプラグインファイルを直接編集することができます。

テーマファイルエディター
テーマファイルエディター

この機能は一見便利ですが、深刻なセキュリティリスクをもたらす可能性もあります。特に複数のユーザーがいるサイトでは、撃者は管理者アカウントに侵入後、まず不正なコードを注入するためにPHPファイルを変更するかもしれません。

サイト所有者にとっても、管理画面で直接ファイルを編集するのは安全とは言えません。ちょっとしたコーディングエラーが死の真っ白画面につながり、サイトにアクセスできなくなる可能性があります。ファイルをローカルで編集し、SFTP経由でアップロードするのがベストプラクティスです。

ファイルの編集を無効にして不正な変更を防ぐには、wp-config.phpファイルに以下の行を追加します。

define('DISALLOW_FILE_EDIT', true);

セキュリティを徹底して強化するには、ファイルの変更を完全に無効にすることを検討してみてください。以下を使用すると、管理画面からプラグインやテーマのインストールや更新ができなくなります。

define('DISALLOW_FILE_MODS', true);

12. wp-config.phpファイルを保護する

wp-config.phpファイルは、WordPressの中でも特に重要なコンポーネントです。このファイルには、データベースのログイン情報や認証キーなどの機密情報が保存されており、攻撃者の標的になっています。このファイルを保護することは、サイトセキュリティを高めるのに不可欠なステップです。

以下は、wp-config.phpファイルを保護する3つの方法です。

  1. wp-config.phpを移動するwp-config.phpはデフォルトでWordPressのルートディレクトリ(/public_html/)に格納されています。これをwwwにアクセスできないディレクトリに移動することで、保護を強化することができます。この方法は多くのサーバーで機能しますが、Kinstaでは組み込みのセキュリティ制限により、既にwp-config.phpへの不正アクセスがブロックされているため操作は不要です。
  2. WordPressのセキュリティキーを更新するWordPressのセキュリティキーAUTH_KEY,SECURE_AUTH_KEYLOGGED_IN_KEYNONCE_KEY)は、Cookieに保存された情報を暗号化し、サイトのセキュリティを強化します。サイトの移行や所有者の変更を何度も行っている場合は、新たなセキュリティキーを生成することをおすすめします。WordPressの秘密鍵ジェネレーター を使ってキーを生成し、wp-config.phpで更新可能です。
  3. ファイルのパーミッションを変更するwp-config.phpデフォルトのファイルパーミッションは通常644で、同じサーバーの他のユーザーが読むことができます。WordPressのドキュメントに従って、パーミッションを440または400に変更し、ファイル所有者のみにアクセスを制限してください。これはFTPクライアントやコマンドラインで実行可能です。不明な場合は、ご利用のサーバーに問い合わせて、サイト環境に適した設定を確認してください。

13. ファイルとサーバーの実行権限を確認する

適切なファイルとサーバーのパーミッション(実行権限)は、WordPressサイトの安全性を確保するために不可欠です。パーミッションが緩すぎると、権限のないユーザーがアクセスしてファイルを変更できてしまう可能性があります。また逆に厳しすぎると、サイトの重要な機能が壊れてしまうかもしれません。適切なバランスを保つことで、機能を維持しながらセキュリティを強化することができます。

ファイルパーミッションは、ファイルの読み取り、書き込み、実行を許可するユーザーを決定し、ディレクトリパーミッションは、フォルダへのアクセスとコンテンツの変更権限を制御します。WordPressの場合、推奨されるパーミッションは以下のとおりです。

  • ファイル644または640に設定します。ただし、wp-config.phpは不正アクセスを防ぐために440または400に設定する必要があります。
  • ディレクトリ:不要なアクセスを制限しながらWordPressが適切に機能するように、755または750に設定します。
  • 777は使用しない:無制限のアクセスが可能になり、サイトが脆弱になるため、アップロードディレクトリであっても777は使用しないでください。

ファイルの実行権限は、FTPクライアントやSolid Securityなどのセキュリティ プラグインで確認・調整することができます。

ファイルパーミッションの詳細はこちらをご覧ください。

14. データベースのセキュリティを強化する

WordPressのデータベースを保護することで、攻撃に対する防御層を増やすことができます。簡単に実践できることとしては、ハッカーに特定されやすいサイト名を含むことが多いデフォルトの形式を一意のデータベース名に変更することです。

例えば、サイト名が「バレーボールトリック(Volleyball Tricks)」だとすると、データベース名はデフォルトでwp_volleyballtricksになります。これを予測しにくいものに変更することで、攻撃の標的になりにくくなります。

また、デフォルトのデータベーステーブルの接頭辞をwp_から39xw_のようなわかりにくいものに変更することで、標準的なテーブル構造を狙う自動化された攻撃を防ぐことができます。これはWordPressのインストール時に行うことができ、適切な予防措置を取れば後から変更することもできます。

WordPressのテーブル接頭辞を手動またはプラグインで変更する方法はこちらをご覧ください。

15. XML-RPCを無効にする

XML-RPCは近年、ブルートフォース攻撃の一般的な標的となっており、その隠れた脆弱性の1つがsystem.multicallで、これにより単一のHTTPリクエスト内で複数のコマンドを実行できてしまいます。

本来は便利な機能として導入されましたが、悪意のあるユーザーはこれを利用して一度に何千ものログイン試行を送信し、ブルートフォース攻撃をより効率的に仕掛けています。

Jetpackのような一部のプラグインはまだXML-RPCに依存していますが、多くのWordPressサイトでは不要です。サイトでXML-RPCが有効になっているかどうかがわからない場合は、XML-RPC Validatorで確認できます。

XML-RPC
XML-RPC

XML-RPCが不要な場合は、無効にすることでサイトのセキュリティを向上することができます。

  • Disable XML-RPC-APIプラグインをインストールして、XML-RPCを完全に無効化
  • Perfmattersプラグインを使ってXML-RPCを無効にし、サイトのパフォーマンスも改善

なお、Kinstaをご利用の場合は上記の操作は不要です。XML-RPC攻撃が検出されると、セキュリティルールが自動的にNginx設定に追加され、リクエストをブロックして403エラーを返します。

location ~* ^/xmlrpc.php$ {
  return 403;
}

16. 直リンクを禁止する

直リンクとは、他のサイトの画像を直接リンクして、自分のサーバーでホスティングする代わりにそのサイトの帯域幅を使って画像を表示することを意味します。これは特にトラフィックの多いサイトに複数の画像をリンクされると、サーバーコストの増加やサイトのパフォーマンス低下につながる可能性があります。

有名な例として、米国のハフポストがThe Oatmealの漫画を直リンクしたところ、後者の帯域幅が過剰に使用され、サーバーコストが1,000ドル以上膨れ上がったということがあります。

ハフポストに画像を直リンクされて多額のサーバーコストを支払うことになったThe Oatmealの反応
ハフポストに画像を直リンクされて多額のサーバーコストを支払うことになったThe Oatmealの反応

直リンクを防ぐには、サーバー設定やCDNを設定して不正な画像リクエストをブロックします。

  • Apache.htaccessファイルにルールを追加して、画像リクエストを独自ドメインに制限
  • Nginx:外部からのリクエストをブロックするように設定ファイルを変更
  • CDNサービスCloudflareKeyCDNを含むほとんどのCDNは直リンク保護機能を提供している

17. WordPressのセキュリティプラグインを使用する

サイトを脅威から守るために設計されたWordPressのセキュリティプラグインは多数あります。安全なサーバー環境はセキュリティ強化の基盤となりますが、プラグインで保護レイヤーを増やすことで、潜在的な脆弱性を監視、検出、防止することができます。

セキュリティプラグインは以下がおすすめです。

これらのプラグインは、それぞれ以下のような異なるセキュリティ機能を提供しています。

  • 強力なパスワードとパスワード有効期限の設定
  • ユーザーの行動を記録し変更や不審な行動を追跡
  • マルウェアやファイル変更のスキャン
  • 二要素認証(2FA)の実装
  • ログインフォームへのreCAPTCHA保護の実装
  • ファイアウォール、IP許可リスト、ブロックリストの設定
  • DNSの変更を監視し、悪意のあるネットワークをブロック

多くのセキュリティプラグインに見られる特に便利な機能のひとつに、WordPressのコアファイルをスキャンしてWordPress.orgの公式バージョンと照合するチェックサムユーティリティがあります。不正な変更が検出されると、ハッキングや悪質なコードインジェクションの可能性があります。

ファイルの整合性監視に関する詳細はこちらをご覧ください。

マルチサイトや複数の投稿者が在籍するサイトには、WP Security Audit Logが良い選択肢になります。ログイン、パスワード、テーマ、ウィジェット、投稿、WordPressの更新の変更を追跡し、詳細なアクティビティログを取得することができます。管理者はリアルタイムでユーザーの活動を監視し、セキュリティと説明責任を向上することができます。

Kinstaでは、すべてのサイトがCloudflare、Google Cloud、そしてKinstaのファイアウォールによって保護され、リアルタイムのセキュリティ監視とマルウェアの除去が無料で付属します。さらに3分ごとに稼働状況を監視し、問題が検出されればエンジニアが直ちに対応することで、常に安全で回復力のあるサーバー環境を保証します。

18. 常にバックアップを取る

どれほどセキュリティ対策を施しても、100%の安全は確保できません。バックアップはハッキング、不慮の削除、サイトの大規模な障害に備えた最後の防衛線になります。しかしながら、定期的なバックアップの重要性は軽視されていることが多く、深刻な問題が発生して初めてその重要性に気がつきます。

ほとんどのWordPress用マネージドサーバーは、バックアップ機能をデフォルトで提供しています。Kinstaのバックアップはサーバーレベルで処理され、毎日作成される自動バックアップを含め6種類のバックアップがあります。ワンクリックで復元できるため、何か問題が発生しても即座にサイトを復旧できます。

MyKinstaのバックアップ
MyKinstaのバックアップ

ご利用のサーバーにバックアップ機能がない場合は、以下を使用することができます。

  • VaultPressCodeGuardBlogVaultなどのバックアップサービス(バックアップをクラウドに安全に保存可能)
  • UpdraftPlusBackupBuddyWP Time Capsuleなどのバックアッププラグイン(Google Drive、Amazon S3、Dropboxのような外部ストレージにバックアップを保存可能)

19. DDoS攻撃対策を講じる

DDoS(DistributedDenial of Service)攻撃は、大量のトラフィックでサイトとリソースを圧倒し、サイトをダウンさせる攻撃です。一般的なハッキングとは異なり、DDoS攻撃がデータを危険にさらしたり、マルウェアを注入したりすることはありませんが、数時間から数日間サイトをオフラインにし、収益の損失や訪問者の不満を引き起こします。

DDoS攻撃からサイトを守る最も効果的な方法の1つは、CloudflareSucuriのようなサードパーティのセキュリティサービスを使用することです。これらのサービスは、悪意のあるトラフィックがサーバーに到達する前にブロックしてくれます。また、攻撃者がサイトを直接標的にすることを困難にするため、発信元のIPアドレスを隠します。

Kinstaの場合、標準搭載のCloudflare統合によってDDoS攻撃対策がデフォルトで組み込まれており、UDP、ICMP、SYN/ACKフラッド、DNS増幅、およびレイヤー7攻撃を含むあらゆるタイプのDDoS攻撃を自動的に検出して緩和します。

DDoS攻撃対策の実例として、大規模なDDoS攻撃に直面たある金融会社は、Kinstaへの移行を決断しました。本稼動直後、サイトは何百万ものリクエストの嵐に見舞われ、混乱を引き起こしました。

帯域幅などを一目で確認できるダッシュボードの分析
帯域幅などを一目で確認できるダッシュボードの分析

KinstaのSysOpsチームはCloudflareと速やかに連携し、不審なトラフィックをブロックしたところ、27分以内に5億1,600万を超える悪質なリクエストが緩和され、サイトのオンラインを維持することに成功しました。

Kinsta infrastructure mitigated 516.9 million requests
Kinstaインフラストラクチャは5億1690万リクエストを緩和しました。

特にウェブサイトが重要な役割を果たすビジネスでは、強力なDDoS攻撃対策に投資することを検討してみてください。サイトのダウンを防ぎ、サイトをスムーズに運営し続けることはビジネスの成功に直結します。

まとめ

WordPressサイトのセキュリティを強化する方法を多数ご紹介しました。強力なパスワードを使用し、コアとプラグインを定期的に更新し、安全なマネージドサーバーを選択することは、サイトを安全に保つ上で特に重要です。

Kinstaのセキュリティ機能はインフラストラクチャに組み込まれています。また、Cloudflareとの統合により、DDoS攻撃対策、エンタープライズレベルのファイアウォール、無料のマルウェア除去を備えたリアルタイムのマルウェアスキャンなどをすべてのお客様に提供しています。2つの堅牢なファイアウォールにより、脅威がサイトに到達する前にブロックし、毎日の自動バックアップと積極的な稼働状況監視により、サイトが常にオンラインであることを保証します。

WordPressサイトがビジネスの収入源である場合、迅速にセキュリティのベストプラクティスを実践することが重要です。また、セキュリティが本業の妨げになるような負担にならないよう、セキュリティの側面を一任できるマネージドサーバーでサイトをホスティングすることをおすすめします。Kinstaでは初月無料プランもご用意しているため、リスクなしでお試しいただけます。ご興味がございましたら、お気軽にお問い合わせください

Joel Olawanle Kinsta

Kinstaでテクニカルエディターとして働くフロントエンド開発者。オープンソースをこよなく愛する講師でもあり、JavaScriptとそのフレームワークを中心に200件以上の技術記事を執筆している。