WordPress特集 - セキュリティ対策

Webサイトはユーザーが求めるコンテンツと美しいデザインで、ページが正常に表示されるように制作するのを目的とします。ただしそれですぐ公開して良いものではありません。公開前にセキュリティ対策を万全にしておくことが必須です。

【記事執筆時の環境】
WordPress 5.8

WordPress はプログラムでできている関係上、バグが必ずあります。これほど世の中に広まっている CMS ですから、脆弱性を見つけて攻撃してくるハッカーもいるでしょう。
また、サーバー設定の不備や PHP の脆弱性など、Web 制作者の責任でない部分でセキュリティに問題が生じることもあります。ただしこれも適切なものを選択することで回避することができます。
しかしハッカーは、Web サイトのセキュリティ対策が甘い部分を攻撃してくるほうが多いのです。そこはサイトを構築した人間の責任となります。

サイトを壊されたり情報を抜き取られたりするのは、ビジネスにも多大な影響を与えますので、サイト公開前にセキュリティ対策はしっかりやっておきましょう。コンテンツを充実したりデザインを変えたりするのは、公開後にいくらでもできます。セキュリティは破られると致命的になりますので、最初が肝心です。

セキュリティ対策も厳密にやろうとすればきりがなく手間がかかるものです。以下、簡単にできてこれはやっておくべきだという対策を説明します。

信頼性のある安全なレンタルサーバーを借りる

WordPress のホスティングサービスやレンタルサーバーはたくさんあります。契約する際に、単に価格が安いというだけで選択すると取り返しのつかないことになりかねません。私も価格が安いので有名な某レンタルサーバーを借りていたとき、サイトをハッキングされ壊された経験があります。原因はレンタルサーバー側のセキュリティ対策の不備でした。
ハードウェアおよびソフトウェアレベルでのセキュリティ対策をしっかりしている、信頼性の高いサーバーと契約することです。

セキュリティサポートが継続しているPHPのバージョンを使用する

WordPress は PHP で書かれたプログラムです。従って PHP 実行環境のあるサーバーでなければ動作しません。多くのレンタルサーバーでは、複数のバージョンの PHP をサポートしており、ユーザーが選択できるようになっています。
PHP も定期的にセキュリティの問題を修正しアップデートされていますが、サポート終了となっているバージョンもあります。
7.2 以下は既にサポートが終了していますし、7.3 も 2021年中にセキュリティサポートが終了します。

パスワードを強化する

これは WordPress に限らずどのようなサービスやシステムを使うにも基本となります。
管理画面にログインするパスワードには、アルファベット/数字/記号を組み合わせ、10文字以上にすべきでしょう。ブルートフォースアタックをうけると、10文字でも現実的な時間で突破されますので、12文字以上が望ましいです。そして他で使用しているのとは、異なるパスワードにします。

ユーザー名を推測されないようにする

ユーザー名も人間が推測できる「admin」などは絶対に使わないようにしましょう。ブルートフォースアタックを防ぐなら、パスワードと同じく長い文字列にすべきです。

ユーザー名に関しては、WordPress の仕様で注意する点があります。
デフォルトでは、WordPress は投稿者アーカイブページを自動的に作成します。アーカイブページの URL は、「ドメイン/author/投稿者名/」となります。そして「投稿者名=ログインユーザー名」となるのです。
さらに悪いことに、投稿者アーカイブページは投稿者名が分からなくても表示できてしまいます。投稿者アーカイブページのリンクをサイト内に設置していなくても、ログインユーザー名は判別されてしまいます。

下記の URL のように、サイトドメインの直下にクエリストリング「?author=1」を付けてアクセスしてみてください。投稿者アーカイブページにリダイレクトされ、ブラウザのアドレスバーからユーザー名が分かります。
https://example.com/?author=1

ユーザー名が分かると、ログインページで防御するのはパスワードだけになってしまうので、セキュリティはかなり低下します。

この対策としては、投稿者アーカイブページを表示できないようにすることです。下記コードを functions.php に追加すると、投稿者アーカイブページにアクセスすると 404エラーになります。

ただしユーザー名を知るには他にも方法があります。
REST API が有効になっていると、「ドメイン/wp-json/wp/v2/users」で表示される情報にユーザー名が含まれています。
これを防ぐには REST API を無効にすればいいのですが、そうすると管理画面が機能しなくなってしまいますし、プラグインによっては動作不具合を起こす可能性もあります。
URL に「/wp/v2/users」が含まれているときに、他のページにリダイレクトするなどの対策が必要です。

ログイン試行を制限する

ブルートフォースアタック対策として、ログインの試行回数を制限します。
これは、プラグイン「Login LockDown」を使用すると簡単です。
初期設定では、5分以内に3回ログインに失敗すると、1時間その IP からのログイン操作は無効となります。

ログインページのURLを変更する

そもそもログインページに誰もがアクセスできるようになっているのも問題です。
WordPress ではログインページの URL がデフォルトでは同じです。ドメインの後に wp-login.php を指定すればログインページが表示されます。wp-login.php の代わりに、admin/login/dashboard を入力してもアクセスできます。
このログインページの URL をデフォルトのままにしているサイトが数多くあります。個人サイトならまだしも、コーポレートサイトでもあります。

ログインページの URL を変更し、一般の人はアクセスできないようにしましょう。
これは、プラグイン「WPS Hide login」を使うのが最も簡単です。

WordPressのセキュリティキーとソルトを更新する

WordPress のセキュリティキーとソルトは、ユーザーがログインした際にクッキーに保存される情報を暗号化して保護します。
wp-config.php の中にランダムな文字列として設定されています。最初の4行がセキュリティキーで、次の4行がソルトです。

以前は WordPress をインストールした際、この文字列を更新するのがベターとされていましたが、現在ではインストール時に独自のキーとソルトが割り当てられるため、更新は不要です。

ただし何らかの理由でユーザーに再度ログインを強制したい際は、この文字列を変更します。管理画面にログインしているすべてのユーザーは、自動的にログアウトされます。
新しい文字列は下記ページにアクセスすると自動生成することができます。
https://api.wordpress.org/secret-key/1.1/salt/

wp-config.phpのパーミッションを設定する

wp-config.php はセキュリティキーとソルトを保存している他、データベース情報も保存しているファイルです。WordPress のセキュリティ上、最も重要なファイルで、これを攻撃者に読み込まれるとアウトです。
従って、ファイルパーミッションは適切に設定します。安全を考えるなら、自分も書き込みができず、サーバー上の他のユーザーは読み込みもできないように 400 に変更します。自分に書き込みを許すなら 600 です。

なお共有サーバーではパーミッションの設定に制限があるケースもありますので、その場合はサーバー仕様を確認して適切なパーミッションを設定します。

注意点として、サーバーの WordPress 簡単インストール機能を使った場合は、自分が所有者となっておらず、パーミッションが変更できないこともあり得ます。
その場合は、一旦 wp-config.php を FTP などでローカルにダウンロードしてから、再度アップロードし上書きします。

【参考ページ】
サポート - ファイルパーミッションの変更

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

WordPress はデータベースとして、MySQL か MariaDB を使います。データベース名・ユーザー名・パスワードも簡単に見破られないものにしておきましょう。
使用するサーバーによってはデータベースがあらかじめ指定されていて、ユーザーがデータベースの設定を変更できないこともあります。その際は、WordPress のテーブル接頭辞だけでもデフォルトを使わないようにしましょう。WordPress をインストールする際、'wp_' 以外にします。

WordPressコア/プラグイン/テーマの最新版を使用する

WordPress 開発でも、専門家からなるセキュリティチームがあります。セキュリティ上の不備が見つかると、アップデート版をリリースする体制になっています。

メジャーアップデートは機能変更がありますから、Webサイトが動作しなくなる心配もあります。したがって自動更新を OFF にしているケースが多いと思います。しかしマイナーアップデートはバグ修正とセキュリティ強化が含まれるので、自動更新を ON にしておくのが基本です。
もちろんマイナーアップデートでもサイトに不具合が生じることもありますから、アップデート後の検証と定期的なバックアップは欠かせません。メジャーアップデートに関しては、テスト環境でテストしてから本番サイトに適用するという運用にしておけばよいでしょう。

問題が多いのはプラグインのほうです。プラグインの脆弱性を突いてくる割合は WordPress コアの何倍もあります。
まともなプラグイン開発者ならセキュリティや WordPress コアのアップデートに追随して定期的にアップデートしてくれますが、ほったらかしの開発者もいます。
信頼できるプラグインのみ使用するのがリスクを未然に防ぐことになります。

テーマもプラグインほどではありませんが脆弱性が生じる可能性があります。こちらも最新版を使うのが基本です。

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

セキュリティ機能をパックにしたプラグインも数多く存在します。それらを使うのも対策となります。
以下はよく使われるプラグインです。

  • WP Activity Log
  • Sucuri Security
  • iThemes Security
  • Wordfence Security

«次の特集記事»
«前の特集記事»

スポンサーリンク

WordPress 特集記事

WordPressの概要

WordPressの仕組み

WordPressのカスタマイズ性

制作環境とインストール

基本設定項目

追加設定項目

Gutenbergエディター

具体的な制作作業

応用・高度機能

実践的なTips

よく使われるテーマ紹介

有用なプラグイン紹介

独自テーマによる制作

オンライン講座

Webの基礎マスター講座ページへのリンク


連載講座:WordPressで作る簡単Webサイトページへのリンク

提供しているサービス

WordPressサイト制作出張講座ページへのリンク

WordPress を利用した Webサイト制作の方法を、
あなたのオフィスにうかがいご説明いたします。
料金:¥45,000

サービス詳細ページ >>

申し込みフォーム >>


Webサイト1日公開サービスページへのリンク

一刻も早く Webサイトが必要な方のために、
一緒に作業し1日で公開までもっていきます。
料金:¥45,000

サービス詳細ページ >>

申し込みフォーム >>

スポンサーリンク

ページの先頭へ