WordPressでブログを開設した(したい)んだけど、ハッカーから狙われやすいって聞いて心配です。安心してブログ運営を行えるようにセキュリティ強化(対策)する方法があれば教えてほしいです。
こういった悩みにお答えします。
本記事で解決できること
- WordPressを最新の状態に保つ必要性
- テーマを最新の状態に保つ必要性
- プラグインを最新の状態に保つ必要性
- WordPressが求める要件を満たす環境を用意する必要性
- ログインページURLの変更方法
- Basic認証の設定方法
- ログインページにreCAPTCHA v3を設置する方法
- ログイン認証をユーザー名ではなくメールアドレスのみ許可する方法
- ログインページに二段階認証を設定する方法
- 万が一(ハッキングされた時)に備えてバックアップを取っておく ※簡単に(素早く)復元できるプラグインが◎
是非、最後までご覧ください。
WordPressのセキュリティ対策【まずはここから】
- WordPressを最新の状態に保つ
- テーマを最新の状態に保つ
- プラグインを最新の状態に保つ
- WordPressが求める要件を満たす環境を用意する
WordPressを最新の状態に保つ
WordPressは、不具合の修正やセキュリティ面で問題が発生した場合にはアップデートされるようになっています。
にも関わらずアップデートせずに放置しているのはサイトを危険に晒しているようなものです。
放置せずに常に最新の状態を保つようにしましょう。
テーマを最新の状態に保つ
テーマを最新の状態に保つ必要性については「WordPressを最新の状態に保つ」と同様です。
また、僕はテーマに「SWELL」を使用しており、公式サイトに動作必須環境が記載されています。
これからテーマの導入をする(考えている)方は必ず要件を満たす環境を用意してからテーマを導入しましょう。
プラグインを最新の状態に保つ
プラグインを最新の状態に保つ必要性については「WordPressを最新の状態に保つ」と同様です。
インストール時に確認しておく項目
- インストール数
- 最終更新日
- 使用中のワードプレスでテストされてるか(WordPressのバージョンに対応しているか)
「詳細情報」にはもっと細かい項目が記載されています。
「詳細情報」からだと下記の2項目まで確認することができます。
- WordPressの必須バージョン
- 必須PHPバージョン
また、テーマによって、相性が良いプラグインと悪いプラグインがあると思いますので合わせて確認しておくと良いと思います。
WordPressが求める要件を満たす環境を用意する
WordPressが求める要件の中でPHPバージョン7.4以上となっていますが、2022年11月28日にサポートは終了しています。
サポートが終了しているということはセキュリティ上の脆弱性や、最新バージョンのPHPで修正されているバグに晒される可能性があります。
そのため僕は2023年11月26日までサポートされているPHP8.0.25を使用しています。
WordPressのセキュリティを難攻不落にするまでの手順5つ
読者の設定順
- 手順①:セキュリティ系プラグイン「Wordfence Security」を導入して、ログインページにreCAPTCHA v3を設置
- 手順②:ログインページに二段階認証設定 ※手順①で設定が完了します。
- 手順③:ログインページのURL変更
- 手順④:Basic認証設定
- 手順⑤:ログイン認証をユーザー名ではなくメールアドレスのみ許可する。
攻撃者の関門順
- 第一関門:ログインページのURLを突き止める。
- 第二関門:Basic認証を破る。
- 第三関門:reCAPTCHA v3の監視をかい潜る。
- 第四関門:ログイン認証を攻略する。
- 第五関門:二段階認証を突破する。
手順①:セキュリティ系プラグイン「Wordfence Security」を導入して、ログインページにreCAPTCHA v3を設置
「Wordfence Security」というセキュリティ系プラグインを導入してreCAPTCHA v3を設置します。
下記画像の赤枠がreCAPTCHA v3です。
「Wordfence Security」では、reCAPTCHA v3以外にも様々なセキュリティ設定が行えます。
「Wordfence Security」で行えるセキュリティ設定
- 「ファイアウォール」の設定
- 「reCAPTCHA v3」の設定
- 「二段階認証」の設定
- 「ブルートフォース保護」の設定
「ファイアウォール」とは
外部ネットワークからの攻撃や不正なアクセスから自分たちのネットワークやコンピュータを守るための「防火壁」です。
「reCAPTCHA v3」とは
「チェックを入れたり(私はロボットではありません)、画像による診断を行わず」にロボットか人間かを自動で判断してくれます。
「ブルートフォースアタック(総当たり攻撃)」とは
ハッカーがクローラーを使いログインページで手あたり次第にユーザー名またはメールアドレスやパスワードを入力してログインを試みることです。
参考記事:「Wordfence Security」の設定方法【SWELL】
手順②:二段階認証設定
手順①で既に設定済みだと思います。
詳しくは、「Wordfence Security」の設定方法【SWELL】で解説していますが、スマホに表示される6桁の数字を入力することでようやく管理画面に入ることができます。
この6桁の数字は30秒ごとに変わっていく仕組みとなっており突破するのは相当難儀なはずです。
手順③:ログインページのURL変更
まずは下記をご覧ください。
- ググれば誰でも分かるURL:サイトドメイン/
wp-login.php
- ググっても(自分しか)分からないURL:サイトドメイン/
wordpress-login.php
下記画像は「ググっても(自分しか)分からないURL」でログインページにアクセスしています。
ググっても(自分しか)分からないURLにすることでログインページにすら辿り着けない可能性もありますのでこの時点で外部からの攻撃を防ぐことができます。
参考記事:WordPressのログインURLをプラグインなしで変更する方法
手順④:Basic認証設定
下記画像がBasic認証が表示されている場面になります。
「ググっても(自分しか)分からないURL」を突き止められたとしてもBasic認証を破らなければログインページへは辿り着けません。
参考記事:WordPressのログイン画面にプラグインなしでBasic認証を設定
手順⑤:ログイン認証をユーザー名ではなくメールアドレスのみ許可する。
ここでは合わせて下記の設定も行います。
- ログイン認証をメールアドレスのみ許可したメールアドレスの変更 ※分かりづらい見出しですみません🙇
- エラーメッセージの変更
何はともあれ、まずはログイン認証をメールアドレスのみ通す作業を行っていきます。
下記のコードを子テーマのfunctions.php
に追加します。
# ログイン認証をメールアドレスだけ通す。
function email_login($user, $username, $password) {
$user = get_user_by('email',$username);
if(!empty($user->user_login)) {
$username = $user->user_login;
} else {
$username = '';
}
return wp_authenticate_username_password(null, $username, $password);
}
add_filter('authenticate', 'email_login', 20, 3);
# ログインページのエラーメッセージを変更。
function hide_login_error_message(){
return 'ユーザー名またはメールアドレスもしくはパスワードが正しくありません。';
}
add_filter('login_errors', 'hide_login_error_message');
これでログイン認証をメールアドレスのみ通すようになりました。
なぜメールアドレスのみを通すようにしたのか
ユーザー名はバレやすく、何も行っていなければ下記の5パターンから知られてしまう可能性があります。
- パターン①:サイトドメイン/?author=1
- パターン②:サイトドメイン/wp-json/wp/v2/users or サイトドメイン/?rest_route=/wp/v2/users
- パターン③:サイトドメイン/wp-json/oembed/1.0/embed?url=ブログカード等が埋め込まれている記事のURL
- パターン④:サイトドメイン/feed or サイトドメイン//?feed=rss
- パターン⑤:記事のコメント欄 ※こちらの記事(≫ WordPress コメント欄のユーザー名を隠す)を参照。
パターン①〜④に関しては、アクセスしたページのどこからにユーザー名が表示されているはずで、パターン⑤に関しては、参考記事を用意しました。
このようにユーザー名はバレやすいので、ログイン認証をメールアドレスのみ通すようにしました。
そして、ここからさらに手を加えていきます。
ログイン認証をメールアドレスのみ許可したメールアドレスを変更する。
下記記事を参考にすることでワードプレスの管理画面以外からでもメールアドレスを変更することができます。
例えばgmailではユーザー名には文字数6〜30文字以内で、英字(小文字)と数字、ピリオド(.)しか使えませんが、これを利用してrh.40v9zfi2x79sks.d6j6hj1k2wqk@gmail.com
のように実在しないメールアドレスを作成することでセキュリティ強化が期待できます。
補足
管理者メールアドレス:WordPress側からの送り先
場所:管理画面メニューの「設定」 > 「一般」内
メール(必須):ログイン用のメールアドレス
場所:管理画面メニューの「ユーザー」 > 「プロフィール」内
以上より、管理者メールアドレスは変更しておりませんので、WordPressからのメールが届かなくなることはありません。
エラーメッセージの変更
下記のコードを子テーマのfunctions.php
に追加します。
# ログインページのエラーメッセージを変更。
function hide_login_error_message(){
return 'ユーザー名またはメールアドレスもしくはパスワードが正しくありません。';
}
add_filter('login_errors', 'hide_login_error_message');
すると「ユーザー名またはメールアドレスもしくはパスワードが正しくありません。」と表示されるようになります。
このように「ログイン認証をメールアドレスのみ通す」「エラーメッセージを変更して正解・不正解を特定されないようにする」ことで、ログインページの突破が難儀なはずです。
管理画面に入る。
これからの段階を全て突破しなければ管理画面に入ることはできないため、個人的には難攻不落だと思っています(自画自賛ですが、、、笑)。
ただ、運営者も管理画面に入る手間は増えますが、被害に遭った時(後)の「精神的ショックやその後の対応」を考えるとセキュリティ強化をしすぎて悪いことはないと思いますし、Clipyというツールを使うことでストレスなく管理画面に入ることもできます。
最後に僕のClipyを使ったログイン方法を紹介して終わりにします。
Clipyを使ったログイン方法
スニペット作成手順
- 手順①:フォルダを作成 ※ 例)hrdyuic.com
- 手順②:スニペット名前を決める。 ※ 例)手順①:ログイン画面
- 手順③:スニペットを入力 ※ 例)hrdyuic.com/wp-login.php
上記の手順①〜③を繰り返して、下記画像の赤枠内を用意しています。
後は順にペーストしていくだけで管理画面に入ることができます。 ※2FA Code(二段階認証のこと)のみ6桁の数字の入力が必要です。
【難攻不落とは言え油断は禁物】万が一(ハッキングされた時)に備えてバックアップを取っておく
バックアップ&復元ともに簡単に(素早く)行えるプラグインが◎
該当するプラグインを下記に貼っておきます。
参考記事:バックアッププラグイン「UpdraftPlus」の使い方と復元方法
参考記事:All-in-One WP Migrationの使い方と容量を上げる方法
今回は以上です。