不正ログイン検知で管理者に即通知する方法
この記事では、WordPressの公式フック wp_login_failed を使って、
不正ログイン試行を正確に検知し、即座に管理者へメール通知する方法を紹介します。
WordPressコアの認証処理に直接フックするため、XML-RPC・REST API経由のログイン試行も捕捉します。
1 functions.php にコードを追加
注意: 必ず子テーマの functions.php に追加してください。親テーマに直接追加するとアップデートで消える可能性があります。
//------------------------------------------------------------
// 本格的な不正ログイン試行検知(公式フック使用)
//------------------------------------------------------------
add_action('wp_login_failed', function($username) {
$ip = $_SERVER['REMOTE_ADDR'] ?? '';
$time = current_time('mysql');
$admin_email = get_option('admin_email');
$subject = '【警告】不正ログイン試行を検知しました';
$message = "不正なログイン試行を検知しました。\n\n"
. "ユーザー名: {$username}\n"
. "IPアドレス: {$ip}\n"
. "日時: {$time}\n"
. "URL: {$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}\n"
. "\nこのメールは自動送信されています。";
// メール通知送信
wp_mail($admin_email, $subject, $message);
});
2 コードのポイント
- wp_login_failed フックは、WordPressの認証エラー時に自動で発火します。
- 認証処理の内部にフックするため、wp-login.php 以外の経路(REST / XML-RPC) でも確実に検知します。
- wp_mail() 関数で管理者メールアドレス(
get_option('admin_email'))へ自動送信します。 - 外部SMTPプラグイン(WP Mail SMTPなど)を使用している場合も問題なく動作します。
3 通知メールの内容例
件名: 【警告】不正ログイン試行を検知しました
本文:
不正なログイン試行を検知しました。
ユーザー名: hacker123
IPアドレス: 203.0.113.45
日時: 20××-10-19 22:14:08
URL: example.com/wp-login.php
このメールは自動送信されています。
4 動作の流れ
- 誰かが存在しないユーザー名や誤ったパスワードでログインを試みる。
- WordPressの内部処理で認証が失敗すると
wp_login_failedフックが発火。 - 検知された情報(ユーザー名・IP・時刻)を自動で管理者メールへ送信。
- これにより不審なアクセスをリアルタイムに把握可能。
5 ポイント解説
5.1 コアフック利用で精度が高い
wp_login_failed は WordPress の認証関数 wp_authenticate() から呼ばれる公式フックです。
ログインフォーム、REST API、XML-RPC すべての経路をカバーできるため、他の「POST監視」型スクリプトよりも正確かつ軽量です。
5.2 処理がサーバー側のみで完結
JavaScriptやウィジェットを使わず、PHPレベルで検知するため、
閲覧ユーザーには一切表示されず、動作も高速です。
攻撃者に検知システムの存在を気づかれにくい構成です。
5.3 セキュリティ強化の第一歩
ログイン画面からの不正ログイン試行とxmlrpcからの不正ログイン試行を検知できます。この仕組みを導入することで、不正アクセスが発生したタイミングを即把握できます。さらに、以下のような対策を組み合わせると万全です。
wp_login_failedの回数を記録し、一定回数でIPをブロック。- ▶ 2段階認証プラグインの導入。
- ログインURLを変更(例:
/wp-login/→/secure-login/)。
6 完成イメージ

※xmlrpc(エックスエムエルアールピーシー)は、WordPressが外部と通信するための古い仕組み(API) です。
もともとは「スマホアプリや他サイトからブログ投稿・編集を行う」ために使われていました。
7 まとめ
このコードは、WordPressが提供する公式のログインエラーフック
wp_login_failed を利用したの不正ログイン検知です。
サイト全体を対象に、ログイン失敗を正確に監視し、管理者へ即時通知を行う堅牢な仕組みを簡単に実装できます。


