WordPress 3分間フッキングシリーズについて
こんにちは!埼玉県川越市を拠点に活動する私たちが、WordPress開発者向けのお役立ち情報「WordPress 3分間フッキング」シリーズをお届けします。料理番組の「3分間クッキング」のように、WordPressの「フック」を使った便利なカスタマイズを短時間で理解・実装できるよう、わかりやすく解説していきます。
今回は管理者向けの認証期間を延長するフィルターフックをご紹介します。このカスタマイズを使えば、管理者がログインする度に何度もパスワードを入力する手間を減らすことができます!
なぜ管理者の認証期間を延長するのか?
WordPressにログインする際、「ログイン状態を保存する」にチェックを入れても、デフォルトでは2週間程度でログアウトされます。サイト管理者として頻繁に管理画面を利用するなら、そのたびにログインし直すのは面倒ですよね。
管理者向けの認証期間を延長することで、自分だけが使用するPCからのアクセスでは、より長期間(例えば1年間)ログイン状態を維持できるようになります。
とはいえ、セキュリティのバランスも考慮すべきポイントです。適切な実装方法と注意点も含めて解説していきます。
認証期間延長のためのフックコード
それでは、今回紹介するコードを見てみましょう。
1 2 3 4 5 6 7 8 9 |
add_filter('auth_cookie_expiration', 'wp3min_extend_admin_cookie', 10, 3); function wp3min_extend_admin_cookie($length, $user_id, $remember) { if($remember && in_array('administrator', get_userdata($user_id)->roles)) { // 管理者が「ログイン状態を保存する」にチェックしてログインすると、365日ログイン状態を維持 return 60 * 60 * 24 * 365; // 1年間(秒数) } return $length; // それ以外はデフォルト値を返す } |
このコードを functions.php に追加するだけで、管理者アカウントのログイン持続時間を365日間に延長できます。簡単ですね!
WordPressの認証クッキーの仕組み
上記のフックコードがどのように動作するのか理解するために、まずはWordPressの認証の仕組みについて簡単に説明します。
WordPressにログインすると、ブラウザに「認証クッキー」が保存されます。このクッキーには、ユーザーIDやログイン情報、有効期限などが暗号化されて格納されています。
デフォルトでは、「ログイン状態を保存する」にチェックを入れなければセッションクッキー(ブラウザを閉じると消える)、チェックを入れると2週間有効なクッキーが発行されます。
「auth_cookie_expiration」フィルターフックを使えば、このクッキーの有効期限を自由にカスタマイズできるのです。
フックコードの詳細解説
それでは、コードの詳細を見ていきましょう。
1. フィルターフックの登録
1 |
add_filter('auth_cookie_expiration', 'wp3min_extend_admin_cookie', 10, 3); |
WordPressの「auth_cookie_expiration」フィルターに「wp3min_extend_admin_cookie」関数をフックしています。最後の「3」は、この関数が3つのパラメータを受け取ることを示しています。
2. コールバック関数の定義
1 2 3 |
function wp3min_extend_admin_cookie($length, $user_id, $remember) { // 処理内容 } |
この関数には3つのパラメータが渡されます:
- $length:デフォルトの有効期限(秒数)
- $user_id:ログインしているユーザーのID
- $remember:「ログイン状態を保存する」がチェックされているかどうか(true/false)
3. 条件分岐と期間設定
1 2 3 4 |
if($remember && in_array('administrator', get_userdata($user_id)->roles)) { // 管理者が「ログイン状態を保存する」にチェックしてログインすると、365日ログイン状態を維持 return 60 * 60 * 24 * 365; // 1年間(秒数) } |
この部分で2つの条件をチェックしています:
- 「ログイン状態を保存する」にチェックが入っているか(
$remember
がtrue) - ログインしているユーザーが管理者ロールを持っているか
両方の条件が満たされた場合のみ、認証クッキーの有効期限を365日(60秒 × 60分 × 24時間 × 365日 = 31,536,000秒)に設定します。
4. デフォルト値の返却
1 |
return $length; // それ以外はデフォルト値を返す |
条件に当てはまらないユーザー(一般ユーザーや、「ログイン状態を保存する」にチェックを入れなかった管理者)に対しては、元のデフォルト値をそのまま返します。
実装手順
それでは、実際にこのコードをWordPressサイトに実装する手順を見ていきましょう。
- WordPressの管理画面にログインします
- 「外観」→「テーマエディター」を開きます(または「テーマファイルエディター」)
- 子テーマを使用している場合は、子テーマを選択してください
- テーマエディターが表示されない場合は、プラグインで無効化されている可能性があります
- 右側のファイル一覧から「functions.php」を選択します
- ファイルの末尾(最後の「?>」がある場合はその前)に、上記のコードを追加します
- 「ファイルを更新」ボタンをクリックして保存します
- いったんログアウトし、管理者アカウントで「ログイン状態を保存する」にチェックを入れてログインします
テーマファイルを直接編集する前に、必ずサイトのバックアップを取っておきましょう。構文エラーがあるとサイトにアクセスできなくなる可能性があります。
カスタマイズのバリエーション
基本的なコードを理解したところで、様々なカスタマイズパターンを見ていきましょう。ニーズに合わせて調整してください。
1. ユーザーロールごとに期間を変える
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
add_filter('auth_cookie_expiration', 'wp3min_role_based_cookie', 10, 3); function wp3min_role_based_cookie($length, $user_id, $remember) { if (!$remember) { return $length; // ログイン状態を保存しない場合はデフォルト } $user = get_userdata($user_id); // 管理者は1年間 if (in_array('administrator', $user->roles)) { return 60 * 60 * 24 * 365; // 365日 } // 編集者は1ヶ月間 if (in_array('editor', $user->roles)) { return 60 * 60 * 24 * 30; // 30日 } // その他のユーザーは2週間(デフォルト) return $length; } |
2. 特定のユーザーIDのみ延長する
1 2 3 4 5 6 7 8 9 10 11 12 |
add_filter('auth_cookie_expiration', 'wp3min_specific_user_cookie', 10, 3); function wp3min_specific_user_cookie($length, $user_id, $remember) { // 特定のユーザーIDのリスト $admin_users = array(1, 5, 10); // サイト管理者のユーザーID if ($remember && in_array($user_id, $admin_users)) { return 60 * 60 * 24 * 180; // 180日間 } return $length; // その他のユーザーはデフォルト } |
3. 信頼できるIPアドレスからのみ期間延長
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
add_filter('auth_cookie_expiration', 'wp3min_secure_ip_cookie', 10, 3); function wp3min_secure_ip_cookie($length, $user_id, $remember) { // 信頼できるIPアドレスのリスト(オフィスや自宅のIP) $trusted_ips = array( '192.168.1.1', '203.0.113.1' // 必要に応じて追加 ); // 現在のIPアドレスを取得 $current_ip = $_SERVER['REMOTE_ADDR']; // 管理者で、信頼できるIPからのアクセスなら期間延長 if ($remember && in_array('administrator', get_userdata($user_id)->roles) && in_array($current_ip, $trusted_ips)) { return 60 * 60 * 24 * 90; // 90日間 } return $length; // その他の条件ではデフォルト } |
IPアドレスによる制限を追加すると、自宅や会社のPCでは長期ログインを許可し、カフェなどの公共の場所では通常の期間に制限するといった、より安全な運用が可能になります。
セキュリティ上の注意点
認証期間を延長することには、便利さとセキュリティのトレードオフがあります。以下の点に注意しましょう。
リスク | 対策 |
---|---|
クッキー情報が盗まれた場合、長期間サイトにアクセスされる可能性 | 信頼できる環境(自宅PCなど)でのみ使用する |
共有PCでログイン状態が残る | 共有PCでは「ログイン状態を保存する」にチェックを入れない |
セッションハイジャック攻撃のリスク増加 | SSL(https)を必ず有効化し、セキュリティプラグイン導入を検討 |
不正アクセスの検出が遅れる | ログイン履歴を記録し、定期的に確認する仕組みを導入 |
長期間の認証状態維持は、特に管理者権限を持つアカウントでは慎重に使用すべきです。セキュリティとの両立を意識しましょう。
セキュリティを強化したバージョン
セキュリティを強化するなら、以下のようなコードがおすすめです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
add_filter('auth_cookie_expiration', 'wp3min_secure_admin_cookie', 10, 3); function wp3min_secure_admin_cookie($length, $user_id, $remember) { // 基本条件:ログイン状態保存にチェックがある if (!$remember) { return $length; } $user = get_userdata($user_id); $is_admin = in_array('administrator', $user->roles); // 管理者の場合のみ追加チェック if ($is_admin) { // 信頼できるIPからのアクセスか確認 $trusted_ips = array('192.168.1.1', '127.0.0.1'); // 自分のIPを設定 $current_ip = $_SERVER['REMOTE_ADDR']; $from_trusted_ip = in_array($current_ip, $trusted_ips); // 追加セキュリティチェック(例:二要素認証が有効か) // 実際にはプラグインによって確認方法が異なります $has_2fa = get_user_meta($user_id, 'has_active_2fa', true); // 信頼できるIPからのアクセスのみ期間延長 if ($from_trusted_ip) { // 二要素認証が有効ならさらに長く if ($has_2fa) { return 60 * 60 * 24 * 365; // 1年間 } return 60 * 60 * 24 * 30; // 30日間 } } return $length; // デフォルト値 } |
このコードでは、IPアドレスのチェックと二要素認証の組み合わせによって、より安全に認証期間を延長しています。
セキュリティの考慮点
長期認証のリスク
- セッション乗っ取りの攻撃対象になりやすい
- 盗まれたクッキーが長期間有効になる
- 共有PCでのアカウント漏洩リスク
- クッキー情報が第三者に渡る可能性
注意すべき状況
- 複数人でアカウントを共有している場合
- 公共の場所や共有PCでログインする場合
- 重要な顧客情報や機密データを扱うサイト
- メンバーシップサイトや有料コンテンツサイト
セキュアな実装のベストプラクティス
- 信頼できる管理者アカウントのみに長期認証を適用
- IP制限や二要素認証と組み合わせる
- 定期的な認証トークンの更新機能を実装
- 複数デバイスからのログイン検知システムを導入
- 不審なログイン試行を検出・ブロックする仕組み
まとめ
今回は「auth_cookie_expiration」フィルターフックを使って、管理者の認証期間を延長する方法をご紹介しました。
このカスタマイズにより、頻繁に管理画面を利用する管理者の作業効率を高めることができます。特に自分一人で運営しているブログや、少人数で管理しているサイトでは非常に便利なテクニックです。
ポイントをまとめると:
- 「auth_cookie_expiration」フィルターを使って認証クッキーの有効期限を変更できる
- ユーザーロール、特定のユーザーID、IPアドレスなどを条件に組み合わせることが可能
- セキュリティとのバランスを考慮し、適切な条件と期間を設定することが重要
- 信頼できる環境(自宅PCなど)でのみ長期認証を使用するのがベストプラクティス
私たちは埼玉県川越市を拠点として、こうしたWordPressの専門的なカスタマイズやプラグイン開発を行っています。サイトの使いやすさを向上させるちょっとした工夫が、日々の運用効率を大きく変えることも少なくありません。
よくある質問
Q: このコードはマルチサイトでも使えますか?
A: はい、使用できます。ただし、ネットワーク管理者(super admin)と通常の管理者(administrator)を区別したい場合は、条件分岐を追加する必要があります。
Q: 認証期間を延長するとセキュリティリスクが高まりますか?
A: はい、一般的にログイン状態の維持期間が長いほど、セッションが盗まれた場合のリスクは高くなります。そのため、信頼できる環境でのみ使用し、可能であればIP制限や二要素認証と組み合わせることをお勧めします。
Q: 管理者以外のユーザーロール(編集者など)に適用してもいいですか?
A: 可能ですが、権限が強いロールほどセキュリティリスクが高くなることを考慮してください。例えば、投稿者(contributor)や購読者(subscriber)のような限られた権限のロールなら、リスクは比較的小さいでしょう。
Q: 既存のセキュリティプラグインと競合しませんか?
A: 一部のセキュリティプラグインは独自のログイン保護機能を持っており、競合する可能性があります。プラグインの設定を確認するか、このカスタマイズを追加した後に正常にログインできるかテストしてください。
サイトのカスタマイズやWordPressプラグイン開発でお困りの場合は、WordPressカスタマイズ・プラグイン開発サービスをご利用ください。また、WordPressサイトのセキュリティや運用に関するお悩みはWordPressトラブル対応・お悩み相談でサポートしています。