【WordPressのセキュリティ対策】エンヴィデザインで行っている基本の対策内容

WordPress(ワードプレス)はホームページ内のお知らせやコラムを簡単に更新できるCMS(コンテンツ・マネジメント・システム)です。
WordPressは無料で高機能なため人気があり、エンヴィデザインでもWordPressサイトを多く手掛けています。
しかし、以下の理由から攻撃の対象になりやすいのも事実です。
- 世界の約4割のサイトで使われており、母数が多いので攻撃対象になりやすい
- オープンソース(無償で一般公開されている)ため、システムの中身が誰でも閲覧でき、セキュリティの欠陥が発見されやすい
なお、WordPress以外にも様々なCMSがあり、WordPressが特別危険ということではありません。
どんなCMSにも一定程度セキュリティ上のリスクがあります。
WordPressは母数が多いため、ハックされた事例も多く不安に思われることもあると思いますが、適切なセキュリティ対策を施せば危険度は大幅に下げることができます。
本記事では、エンヴィデザインで日頃行っている基本のセキュリティ対策をご紹介します。
管理画面へのアクセス制限
ログインURLの変更
WordPressのログイン画面のURLは、初期状態だと以下のようになっています。
- https://サイトURL/wp-login.php
- https://サイトURL/wp-admin
サイトURLの後ろに、wp-login.phpやwp-adminを付け足すと簡単にログイン画面にアクセスできます。
もちろんユーザー名やパスワードが分からなければログインできませんが、攻撃者がログイン画面に辿り着けないのが一番です。
そこで、ログイン画面に/wp-login.phpや/wp-adminではない任意の文字列を設定し、簡単には辿り着けないように設定します。
ログイン画面に画像認証またはGoogle reCAPTCHA(リキャプチャ)を設置
ログイン画面に画像認証やreCAPTCHAを設置することで、botではなく人間がログインしようとしていることを判別します。
攻撃者はbotを使ってユーザー名やパスワードなどを、何千・何万パターンも総当たりで試してきます。
そこで、botには判別できない「ひらがな」の入力欄を設けたり、reCAPTCHAでbotを判別するなどして、botにログインさせないようにします。
管理画面へのアクセスを国内に制限
サイトへの攻撃は日本国外のIPアドレスから行われることが多いため、国外からの管理画面へのアクセスを禁止します。
国外にも関係者の方がいる場合、その方のIPアドレスのみ個別で許可できます。
ホームページ自体は国外からも問題なく閲覧でき、あくまでも管理画面へのアクセスを禁止するものです。
管理画面にアクセスできるIPアドレスを制限(オプション)
組織内の固定IPアドレスからしか管理画面にアクセスしない場合、その固定IPアドレスのみ接続できるように許可します。
自宅や外出先など、異なるIPアドレスからはアクセスできませんが、セキュリティ面はかなり高まります。
IPアドレスの追加・削除は、その都度対応する必要があります。
ユーザーアカウント・ログイン関係の設定
ユーザー名の変更
WordPressの初期設定ではログインユーザー名が「admin」となっています。このまま使用することは大変危険なため、必ず任意のユーザー名に変更します。
ブログの表示名とユーザー名を変更
WordPressの初期設定では、ログインユーザー名とブログの表示名が同一に設定されます。
たとえば、ユーザー名がadminのアカウントがブログを執筆し公開した場合、「このブログを書いた人」に「admin」と表示されてしまいます。
ブログの表示名からユーザー名が推測できる状態は危険なため、ブログの表示名を任意のものに変更し、ユーザー名を推測できないようにします。
ユーザー名を確認できないようにする
WordPressの初期状態では、URLの末尾に特定のパラメータを入力することで、ログインユーザー名を簡単に調べることができます。
ユーザー名が分かると、あとはパスワードを総当りで試すだけなので危険です。
そこで、パラメータを入力してもユーザー名が調べられないよう対策しています。
強力なパスワードを設定
管理画面に攻撃者がログインすることを防ぐ最も重要なポイントは、強力なパスワードを設定することです。
パスワードは桁数が多く、英数字や記号を組み合わせ複雑化したものが効果的です。
ログイン失敗が連続した場合ロックアウトする
攻撃者は攻撃用のプログラムを組み、ユーザー名やパスワードを総当たりで何千・何万パターンと試してきます。
そのため、例えば「5分以内に5回以上ログインに失敗したら、60分間当該アカウントを停止する」設定が有効です。
もしアカウントが停止されたら、管理者宛に通知メールが届くため、人間が誤ってロックアウトされたのか、botなどから攻撃を受けたのか判断できます。
一定時間で強制ログアウトさせる
「ログイン後60分で強制的にログアウトさせる」ような設定です。
強制的にログアウトされた後は、再度ユーザー名とパスワードを入力することですぐにログインできます(◯分間は使えない、というロックアウトはされません)。
普通に60分以上操作したい人には少々不便ですが、「ログアウトを忘れたままPCを放置し、何者かに管理画面を操作されてしまう」リスクを下げることができます。
管理画面から更新できるページを制限
WordPressでホームページを作成する場合、お知らせやコラムなどはWordPressの管理画面から更新しますが、それ以外の固定ページ(会社概要など)はFTPソフトを使って直接サーバ上のファイルを更新します。
しかし、実は固定ページ(会社概要など)も、管理画面から更新できる機能が存在します。
この機能を使わない場合は、機能そのものをオフにします。
この機能を使って固定ページを更新すると、更新方法を間違えた際にサイト全体が閲覧できなくなる可能性があります。
また、万が一攻撃者が管理画面に侵入した際に、固定ページが更新できるとサイト全体が改ざんされてしまいます。
管理画面から更新できるページを制限することで、操作ミスや改ざんを防ぐことができます。
適切なバージョン管理
WordPressは、WordPress本体と、様々な機能を追加するプラグイン(拡張機能)で構成されています。
WordPress本体もプラグインも、セキュリティの向上やバグ対策のため日々アップデートされています。
ホームページを公開した時は最新版でも、公開後アップデートを適用せずに年数が経過すると、最新のセキュリティ対策が施されていない脆弱性のあるサイトになってしまいます。
WordPress本体もプラグインも、随時適切にアップデートし、最新のセキュリティ対策を施しておく必要があります。
WordPressのバージョンアップ
現在のWordPressは、バージョンが自動でアップデートされるよう初期設定されています。
ホームページ公開後、新しいWordPressのバージョンがリリースされると、WordPress側が自動で最新版に更新してくれるので、管理者側の作業はありません。
ただし、アップデート後のWordPressと公開当時に記述したコードが対応しなくなり、表示が崩れる、表示されなくなることもまれにあります。
WordPressのバージョンアップによる表示崩れや「表示されない」を防ぐには
WordPressのバージョンアップには、「マイナーアップデート」と「メジャーアップデート」があります。
マイナーアップデートは、バグの修正やセキュリティ面の向上が目的の小さなアップデートで、マイナーアップデートが原因で表示が崩れることはほとんどありません。
メジャーアップデートは新機能の追加や仕様変更を伴う比較的大きなアップデートで、マイナーアップデートに比べると表示崩れ等の原因になりやすいです。
そこで、セキュリティに関わるマイナーアップデートのみ自動更新にしておき、メジャーアップデートは手動更新にする方法があります。
メジャーアップデートが発表されたら、本番環境と全く同じ内容のテスト環境を構築し、テスト環境で手動アップデートを試していきます。
アップデート中に不具合が発生したら、原因を特定して対策します。
本番環境はテスト環境と同じように対策しアップデートすれば、動作不良を防ぎながらアップデートが完了します。
プラグインを自動アップデートにする
プラグインの脆弱性を突いた攻撃も多いため、WordPress本体と同様にプラグインも最新版に保っておく必要があります。
プラグインも自動更新されるよう設定しています。
プラグインの自動アップデートによる表示崩れ「表示されない」を防ぐには
プラグインもWordPress本体と同様、手動アップデートに設定しておくことができます。
自動で更新されないため、テスト環境で動作を確認しながら一つずつ更新し、問題なければ本番環境も更新します。
ただ、アップデートが発表されてから手動更新するまでの間は脆弱性がある状態になるため、なるべく早くアップデート対応する必要があります。
バージョン情報を表示させない
WordPressの初期設定では、ソースコードにver=6.2
などとバージョンが表示されるため、これを非表示にします。
WordPressの各バージョンには固有の脆弱性がある場合があり、攻撃者にバージョンを知らせることで攻撃のヒントとなることを防ぎます。
また、以下のファイルにもバージョン情報が記載されているため、外部から閲覧できないよう設定します。
- wp-config .php
- readme.html
- license.txt
wp-config-sample.phpも閲覧できないようにするか、サーバーから削除します。
バージョン情報の記載はありませんが、WordPressの構造を理解するのに役立つ可能性があるためです。
お問い合わせフォームの対策
お問い合わせフォームに悪意のある指示を仕込んで送信し、サイトを破壊したり、サイトからデータを抜き取る攻撃手法があります。
そのため、お問い合わせフォームを設置する場合は以下の様な対策を実施します。
バリデーションの実施
例えば電話番号の入力欄に数字以外の英字・記号が入力されていないかのチェックです。入力欄を悪用し不正なスクリプト(命令)を送信することを防ぎます。
バリデーションはセキュリティ対策以外に、使いやすさ向上や入力間違い防止にも役立つため、適切に設定しておきます。
問い合わせはデータベースに保存しない
問い合わせ内容をデータベースに保存すると、万が一データベースに侵入された際、お問い合わせフォームから問い合わせがあった第三者などの個人情報が流出してしまいます。
データベースに侵入されないようセキュリティを堅牢にするのが第一なのですが、万が一のことも考え、データベースに個人情報を保管しないよう設定します。
WAF(Web Application Firewall)の設定
WAF(ワフ)とは、ホームページにアクセスするユーザーとサーバーの間に設置するセキュリティ上の防護壁です。
サーバーとの通信を解析し、攻撃だと判断した通信を遮断します。
著名なレンタルサーバーであれば、管理画面からWAFのON/OFFが選択できます。
その他の対策
適切なプラグインの選定
脆弱性のあるプラグインが攻撃の入り口となる場合もあるため、セキュリティ対策が継続的になされているメジャーなプラグインのみ使用しています。
また、WordPressインストール当初からはいっているプラグインや、開発途中で試したプラグインなど、使用しないプラグインはアンインストールします。
サーチコンソールやアナリティクスに登録
サーチコンソールやアナリティクスとは、Google社が提供しているホームページの検索・閲覧状況を分析するツールです。
これらのツールには、セキュリティ上の異常を発見したら通知してくれる機能があるため、登録しておきます。
コメント欄を閉鎖
コメント欄にスパムコメントを投稿されないようにします。
通常、弊社が制作するサイトにコメント欄を設けることはほとんど無いですが、念の為大元のコメント許可設定をオフにしておきます。
本記事ではあえて詳細を省いた設定もありますが、弊社で基本的に対応しているセキュリティ設定をご紹介しました。
「WordPressサイトを作りたいけどセキュリティが気になる」、「セキュリティについて社内でどう説明したら良いか分からない」という方は、ぜひ一度ご相談ください。