【備忘録】WordPress構築で気をつけるセキュリティのあれこれ

「WordPressってセキュリティ的に危ないんじゃない?」

クライアントからこのようなご意見をいただいた。同じように思っている人は少なくないと思う。

確かに分からなくもない。WordPressで構築したサイトには、確かにセキュリティリスクはあるからだ。

ただ、WordPressサイト構築を商材にしている手前、その辺はしっかり説明しておきたいところ。

今回はWordPressのセキュリティリスクや対策方法について、webディレクターとしてまとめてみる。

私はwebディレクターとしてそこまで経験がある訳ではないので、もし間違ったことを言っていたら、指摘いただけると嬉しいです。

でもWordPressで構築するメリットはあるよね

まず、WordPressで構築するメリットを考えてみる。

メリット①:オープンソースソフトウェアであること

世界で最も使われているCMSであるWordPress。
間違いなくオープンソースソフトウェアである(誰でも無償で使用することができる)ことが1つの理由でしょう。

サーバとドメインさえ用意できれば、気軽にwebサイトを構築できる。利用できるプラグインが豊富で、カスタマイズ性も高い。

WordPressをサーバにインストールするのも簡単なので、専門的な知識は必要としない。とにかく優しくて、コスパが非常に高いCMSと言える。

メリット②:利用者数が非常に多いこと

前述の通り、世界でもっとも多く使われているCMS。

Web技術調査サービスW3Techs の調査報告によると、執筆時点で全世界の40%以上のWEBサイトはWordPressで構築されているとのこと。CMSの中でも圧倒的なシェアを得ていることが分かる。

では、利用者が多いことがなぜメリットなのか。

利用者が多いと言うことは、開発者もそれだけ多く存在しているということ。開発者が限定的なシステムより間違いなく情報は多い。

また、高頻度でアップデートが行われ、脆弱性の発見・修正や機能の追加などが実行され続ける。利用者が多いことでのメリットはこの辺にあるでしょう。

メリット③:拡張性が高いこと

オリジナルテーマを開発できたり、有料テーマを自由に選択できたりするので、非常に自由度が高いCMSであると言える。(もちろんWordPressに限ったことではないが)

また、プラグインをインストールすることで、できることを増やせるのも大きなメリット。

WordPress.orgの公式サイトによると、執筆時点で6万近くのプラグインが提供されている。選択肢が多すぎるくらいである。

WordPressは危険?果たして本当にそうなのか。

WordPressは危険だ。

そう耳にすることも少なくない。
本当にそうなのか。私としてはこう思う。

WordPressは他の多くのCMSと比べて、システム的にセキュリティが弱い訳ではない。(逆に特別セキュアなCMSというわけでもない)

WordPressのセキュリティリスクが特に注目される理由は、単純に全世界で利用者が多いので、それに比例して改竄(改ざん)などのトラブルも多くなるということだと考えている。

セキュリティ対策をしっかり行えば、一般企業のサイトはWordPressで問題なく構築ができる。有名な話だが、あのホワイトハウスのホームページはWordPressで作られているくらい。バイデン大統領就任の2021年にリニューアルしたときもやっぱりWordPressで構築してた。しかも爆速。(万一、ハッキングされて誤った情報を流されデモしたら、株価などにも影響して大変なことになりそうじゃないですか、、、?と私は思う)

脆弱性が発見されるとすぐにアップデートが行われるなど、世界中で多く使われているCMSだからこそのメリットがある。

つまり、WordPressのシステムの構造自体にセキュリティ的な問題があるわけではなく、単純に標的にされる母数が多いという話である。(と思っている。違う考えをお持ちの方はぜひ教えていただきたい。)

WordPressは正しく運用できればコスパが高いCMSなので、決して新しいものではないが、今でも多くの制作会社が商材として扱っている。界隈でもオワコンと言われたりするが、開発費などをとっても全然選択肢には入ると思う。

抑えておきたいWordPressのセキュリティ対策

でも、やっぱりセキュリティ面には最新の注意を払いたい。ここでは、WordPressにおいて行うべきセキュリティ対策についてまとめる。

保険をかけるわけではないが、開発者側が常に悪質なユーザー(ハッカー)を上回ることはそう簡単ではなく、「これだけをやっておけば絶対に安全!」というわけではない。

最低限抑えておきたい対策として読んでほしい。これらは、あくまで最低限行うべき施策であり、より万全な体制を整えるのであれば専門的な知識や適切な運用が大切です。

①ソフトウェアを最新の状態にする

数多くあるセキュリティ対策のうち、初歩的な対策はWordPressやプラグインといったソフトウェアのバージョンを最新の状態にアップデートすること。

WordPressそのものやプラグインに脆弱性が発見されるとアップデート情報が配信される。アップデートをせずに放置していると、発見された脆弱性がセキュリティホールとなり、外部からの攻撃を受けやすくなるのは当然のこと。こうしたセキュリティホールをついた攻撃を防ぐために、WordPressやプラグインは常に最新版であることが望ましい。

ただし、何でもかんでもポチポチ更新ボタンを押したり、自動更新をオンにしていたりするのも別の意味で危険である。

ソフトウェアをアップデートする際は、システムが正常にワークするか検証する必要がある。必ずソースコードとデータベース(DB)のバックアップを行い実行すること。

②不要なプラグインを削除する

これも簡単なことだが、意外と放ったらかしにされがち。プラグインは便利ではあるものの、数が増えればそれだけセキュリティホールになるリスクは高まると考えてよい。そのため、長く使用してなかったり無効化していたりするプラグインは削除するのが無難である。

③ログイン画面のURLを変更する

WordPressにおいて、セキュリティ攻撃の多くはログイン画面に対して行われる。そのため、そもそもログイン画面にアクセスさせなければ攻撃の多くを防ぐことが可能になる。

WordPress管理画面のログインURLは、初期設定で「https://ドメイン/wp-admin/」や「https://ドメイン/wp-login.php」となっており、ハッカーは容易に推測することができてしまう。あとは機械的に総当たり攻撃をすれば簡単に侵せてしまう訳だ。

これだけ聞いても、ログイン画面のURLをデフォルトのままにしていることがいかに危険なことかが分かる。

ログインURLを変更する方法は、プラグインを使用するのが簡単。おすすめは「SiteGurad WP Plugin」や「WPS Hide Login」あたり。

SiteGuard WP Plugin
https://ja.wordpress.org/plugins/siteguard/
※多機能だが、マルチサイトに対応していない。

WPS Hide Login
https://ja.wordpress.org/plugins/wps-hide-login/
※マルチサイトにも対応。

いずれも管理画面から設定を行うので、特別な知識がなくても簡単に設定することができるのでやらない理由はない。

④ログインに画像認証を追加する

よく「自転車」を選択してくださいなどと画像を選択させられることがあると思う。もしくは、わざと分かりにくく表示された画像の文字を入力させるものもある。画像認証とはそれである。

万が一、ログイン画面に到達された場合、悪質なユーザーは自動プログラムによって攻撃を仕掛けてくる。ログイン時に画像認証を入れることで、目視による操作が必要となり、自動プログラムによる攻撃を防ぎやすくなる。

WordPressのログイン画面に画像認証機能を追加するのもプラグインで可能。先ほど紹介した「SiteGuard WP Plugin」で設定するとよいと思う。

SiteGuard WP Plugin
https://ja.wordpress.org/plugins/siteguard/
※「SiteGuard WP Plugin」はさまざまな機能がありますが、他のセキュリティ系のプラグインと競合しやすいので、URLの変更は「WPS Hide Login」で設定するのがオススメです。

⑤ログインの失敗回数を制限する

悪質なユーザーはパスワードを自動生成して何度も管理画面のログインを試みてくる。そこで、ログインの失敗回数を制限して総当たり攻撃に備える。こちらも「SiteGuard WP Plugin」で設定が可能。

SiteGuard WP Plugin
https://ja.wordpress.org/plugins/siteguard/
プラグインを有効化することで「5秒間に3回連続でログインに失敗すると1分ロックされる」機能が実行される。ロックする回数、時間などの変更は、SiteGuradのダッシュボードから「ログインロック」から設定可能。

⑥ログイン画面にBasic認証を設定する

ログイン画面にBasic認証を設定し認証機能を二重にすることで、セキュリティがより強固になる。

ログイン画面にBasic認証を設定する場合は、以下のような手順でパスワードファイルをサーバーにアップロードして、htaccessへBasic認証の設定を追記する方法がある。

  1. 【.htpasswd】(パスワードファイル)を作成して、サーバーにアップロードする。【.htpasswd】は以下のような生成サービスを利用すると簡単。
    https://www.luft.co.jp/cgi/htpasswd.php

  2. 【.htpasswd】にBasic認証の以下の設定を追記してサーバーにアップロード。ソースコード編集などの知識が必要なので、不安な場合はエンジニアに依頼すること。

<Files wp-login.php>
AuthUserFile /[.htpasswdまでのディレクトリ]/.htpasswd
AuthGroupFile /dev/null
AuthName “”Protected Area””
AuthType Basic
require valid-user
</Files>

⑦ログイン画面のアクセスを接続元のIPで制限する

そもそもログイン画面にアクセスできる場所をIPアドレスで限定し、不特定多数のログイン画面へのアクセスを防ぐ方法。ログイン画面にIP制限を設定するには、【.htpasswd】へIP制限の以下の設定を追記し、サーバーにアップロードすれば完了。

<Files wp-login.php>
order deny,allow
deny from all
allow from [許可するIP]
</Files>

⑧外部からデータを取得・追加・更新・削除できないようにする

WordPress4.7から「REST API」がサポートさたことで、ログインすれば認証情報不要で誰でもWordpressの情報(投稿、ユーザー情報など)を取り出したり、書き込んだりできるようになった。

これにより「記事の自動投稿」や「記事情報の自動取得」ができるようになったので、運用によっては便利になった。

しかし、さまざまなデータを外部から取得・追加・更新・削除ができることで、悪質なユーザーから攻撃対象にされてしまうことも少なくない。

REST APIはデフォルトで有効化されているので、記事の自動投稿などをしない場合は必ず無効化すること。REST APIを無効化するのに便利なWordPressプラグインは「Disable REST API」。

Disable REST API
https://ja.wordpress.org/plugins/disable-wp-rest-api/

インストールして有効化するだけで、認証していないユーザーからREST APIを保護してくれる。WordPressで子サイトを運用している場合は、子サイト側でもインストールが必要。REST API機能を駆使していないことが前提なので、自社のWordPressの仕組みを十分に理解したうえで「Disable REST API」を導入すること。

⑨ユーザーのパスワードを複雑にする

基本的なことで忘れがちだか、パスワードはより複雑なものを設定すること。例えば、企業名、ドメイン名、日付、ユーザー名と同じといったパスワードは簡単に突破されてしまうため避けるべきである。

⑩利用者ごとにユーザーを用意する

アカウント管理の基本的な考え方だが、これも見落としがちなポイント。運用メンバーの変更を考慮して利用者ごとにユーザーを用意する。

まとめ

WordPressは非常に便利でコストパフォーマンスが高いCMSだか、その反面さまざまなセキュリティリスクと常に隣り合わせでもある。

セキュリティ対策をしないと悪質なユーザーのターゲットになってしまう。WordPressはセキュアな状態で利用する努力が必要。

セキュリティ対策多過ぎじゃない?と感じるかは人それぞれだと思う。分かってる制作会社ならこの辺は最低限やってくれると思う。大切なWebサイトを守るためにも、制作会社に相談してみてもよいと思う。

ここで私が間違ったことを書いていたり、重大な見落としがあった場合は、優しく教えてください。

この記事が気に入ったらサポートをしてみませんか?