WordPress管理画面ログイン通知メールと2段階認証

SiteGuard WP Plugin でログイン画面やコメントの画像認証をオンにしていると、ランダムに表示される png 画像が見つからない File not found のエラーがサーバーのエラーログに出るようになりました。

/plugins/siteguard/really-simple-capcha/tmp/ランダムな9桁の数字.png

WordPress.org のフォーラム トピック: SiteGuard WP Pluginのエラーアラートの読み方 と全く同じ現象ですが、解決方法はなさそうです。

トピックを投稿された方のサーバー環境は mixhost、私のレンタルサーバーはカラフルボックスなので、もしかすると LiteSpeed サーバーで起こる現象かもしれません。※ カラフルボックスにサーバーを移転した記事は、こちら をご覧ください。

SiteGuard WP Plugin は、ログインアラート(ログインがあったことをメールで通知)の機能とログイン時の画像認証しか使用していなかったのと、組み込まれている really-simple-capcha のアップデートは今後無さそうなので、代替として「ログインメール通知」のコード作成と「2段階認証」のプラグインを導入しました。

ログインメール通知(アラート)のコード

このブログの管理人は私一人なので、「ログインメール通知」は必要なのかな?と思いましたが、もしログインされた場合に備え、関数リファレンス/wp mail – WordPress Codex 日本語版 を参考に、WordPress の wp_mail 関数を使って書いてみました。
WordPress のバージョン 5.0、php7 の環境で動作しています。

function login_notify ( $user_login ) {
    $website = 'KEN-G.COM';
    $datetime = current_time( 'Y-m-d D H:i' );
    $getip = $_SERVER['REMOTE_ADDR'];
    $ua = $_SERVER['HTTP_USER_AGENT'];
    $email = get_option('admin_email');
    $subject = ''.$website.'にログインがありました';
    $headers = array ( 
        'From: '.$website.' <'.$email.'>',
        'Content-Type: text/html; charset=UTF-8',
        );
    $message = '<html><body>'.$datetime.' に '.$user_login.' がログインしました。<br><br>IPアドレス:'.$getip.'</br>ユーザーエージェント:'.$ua.'</body></html>';

    wp_mail( $email, $subject, $message, $headers );
    }
add_action( 'wp_login', 'login_notify', 10, 1 );

KEN-G.COM の部分は、ウェブサイト名で、メールの件名に表示されます。
ウェブサイト名を変更後、WordPress のテーマの function.php などに追記すればOKです。
メールアドレスは、WordPress の管理画面のプロフィールに登録されているメールアドレスに送信されます。

WordPress の管理画面にログインした時点で、wp_mail で送られてくるメールの件名は、「KEN-G.COMにログインがありました」で、メールの本文は以下のようになります。

2018-12-17 Mon 21:00 に admin がログインしました。

IPアドレス:10.0.1.1
ユーザーエージェント:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15

WordPress管理画面へのログインを2段階認証に

WordPress 2段階認証 ワンタイムパスワード 入力画面
WordPress ワンタイムパスワード 入力画面

WordPress の Jetpack の機能「シングルサインオン」を使うのが手軽で良いのですが、Jetpack はインストールしていないので、WordPress の開発者の方がリリースしている Two-Factor プラグインを導入しました。
現時点でベータ版ですが、問題はなさそうです。
認証方法は、メールアドレス、ワンタイムパスワード(Google Authenticator)、Universal 2nd Factor になります。

WordPress 2段階認証 Two Factor プラグイン
Two Factor プラグインの設定画面

Two-Factor プラグインを有効後、ユーザー メニューの あなたのプロフィール ページに Two-Factor Options が追加され認証方法を選択可能です。
Google Authenticator などの2段階認証のアプリで、QRコードを撮影するか表示されている文字列を入力すれば、アプリ側での登録は完了です。
最後に、アプリ上で表示されている数字を WordPress側の Authentication Code に入力して Submit すれば登録が完了します。

2段階認証は、ログインの際に毎回アプリを起動して数字をコピーするのは手間がかかりますね。
パスワードの管理を 1Password でされている方は、新規フィールドの種類を ワンタイムパスワード にして設定すれば、自動でワンタイムパスワードをクリップボードにコピーしてくれます。 ※ 他のパスワード管理アプリでも可能かと思います。

最後に

SiteGuard WP Plugin のプラグインを使用する以外で、メール通知アラートを実行する具体的なコードはなかったので、書いてみました。参考にして頂けたら幸いです。

MOST READ 昨日のアクセス数ランキング

コメントをどうぞ

コメントは確認後に反映されます。
コメント内容、名前(ニックネーム可)、メールアドレスの項目は必須となります。メールアドレスは公開されません。