管理者パスワード再設定プラグイン
AdminPasswordRecovery — SHA-256トークンハッシュ化、アカウント特定防止、新旧メール二重通知を備えた堅牢なセキュリティ拡張
1プラグイン概要
管理者パスワード再設定プラグイン(AdminPasswordRecovery)は、EC-CUBE 4.x の管理画面ログイン画面にパスワードリセット機能を追加し、同時に管理者の登録メールアドレスを安全に変更・管理するセキュリティ強化プラグインです。
万が一の管理者パスワード失念時の救済はもちろんのこと、**トークンのSHA-256ハッシュ化保存**、**アカウント存在探索攻撃(User Enumeration)への完全防護**、**メールアドレス変更時の新旧両アドレスへの緊急通知**など、エンタープライズレベルのセキュリティ基準を満たす設計になっています。
主な機能ハイライト
2インストール・有効化
2-1. ファイル配置
プラグインのプログラムファイルを EC-CUBE の Plugin ディレクトリへ配置します。
/path/to/eccube/app/Plugin/AdminPasswordRecovery/ ← ここに配置2-2. コマンドでの有効化
EC-CUBE ルートディレクトリにて以下のコマンドを実行します。
cd /path/to/eccube
php bin/console eccube:plugin:install --code=AdminPasswordRecovery
php bin/console eccube:plugin:enable --code=AdminPasswordRecovery
php bin/console cache:clear3セキュリティアーキテクチャ (詳細)
管理者の権限を守るため、本プラグインでは以下のような先進的な安全対策が組み込まれています。
3-1. アカウント存在確認攻撃 (User Enumeration) への対策
通常のシステムでは、未登録のメールアドレスを入力した際に「該当のメールアドレスは見つかりません」というエラーを出力しますが、攻撃者はこれを利用して登録済みの管理者メールアドレスを特定しようと試みます。
3-2. SHA-256 によるトークンハッシュ化保存
リセットメールに含まれる一方向トークンは、データベース保存時に hash('sha256', $token) でハッシュ化されて記録されます。
- 万が一データベースが不正閲覧・漏洩した場合でも、生のトークン文字列を復元することは不可能です。
- 実際の検証時には、顧客がクリックしたURLに含まれるトークンを再度ハッシュ化して照合を行う安全な構造です。
3-3. 動的送信元 & URL自動解決
メール送信元の差出人名やFromアドレスは、EC-CUBEの「店舗基本情報設定(BaseInfo)」から自動取得されます。また、リセットURLもSymfony Routerにより環境(HTTP/HTTPS、サブディレクトリ、ドメイン)に合わせて自動的に正確な絶対URLが生成されます。
4パスワード再設定の流れ (詳細)
パスワードを失念した管理者が再設定を行う具体的なステップです。
ログイン画面から申請
管理画面ログインページ(`/admin/login`)に追加された **「パスワードをお忘れの方はこちら」** リンクをクリックします。
メールアドレスの入力
登録しているメールアドレスを入力して「送信」ボタンを押します。
再設定メールの受信 & リンクアクセス
届いた「【重要】パスワード再設定のご案内」メール本文に記載されているリセット用URLをクリックします(有効期限: 1時間)。
新パスワードの登録
新しいパスワードを2回入力して「変更する」をクリックします。変更が完了すると、自動的にログイン完了通知メールが送信されます。
5メールアドレス管理 & 二重通知 (詳細)
管理者の登録メールアドレスを安全に変更するための仕組みです。
5-1. メールアドレス変更手順
- 管理画面にログインし、「システム設定」 ➔ 「メールアドレス設定」 を開きます。
- 新しいメールアドレスを入力し、「確認メールを送信」をクリックします。
- 新しいメールアドレス宛に「メールアドレス変更の確認」メールが届きます(有効期限: 24時間)。
- 管理画面にログインした状態で確認URLをクリックすると、メールアドレスの変更が確定します。
5-2. 不正検知のための「新旧アドレス二重通知」機構
悪意ある乗っ取りや誤設定を防ぐため、メールアドレスの変更が完了した瞬間に **2通の通知メール** がそれぞれ即座に自動送信されます:
| 通知先 | 件名 | 目的・役割 |
|---|---|---|
| 新しいメールアドレス宛 | 【完了】メールアドレスが変更されました | 新しいアドレスへの正常な切り替え完了を通知します。 |
| 以前の古いメールアドレス宛 | 【重要】メールアドレスが変更されました | セキュリティ警告通知。 もし第三者によって勝手に変更された場合、元のメールアドレスへ警告が届くため、不正アクセスを即座に発見して対処することができます。 |
6各種自動送信メール一覧
本プラグインが自動送信する全4種類のメールテンプレート概要です。
| メールの種類 | 件名 | 送信タイミング |
|---|---|---|
| パスワードリセット依頼 | 【重要】パスワード再設定のご案内 | ログイン画面からリセット申請が行われた時(トークンURL送信) |
| パスワード変更完了通知 | 【重要】パスワードが変更されました | 新パスワードの設定が正常に完了した時(セキュリティ警告) |
| メールアドレス変更確認 | 【重要】メールアドレス変更の確認 | 管理画面から新メアドへの変更申請が行われた時(承認URL送信) |
| メールアドレス変更完了通知 | 【完了】 / 【重要】メールアドレスが変更されました | 承認URLがクリックされ、メアド変更が確定した時(新旧両アドレス送信) |
7期限切れトークンの自動削除 (cron設定)
時間が経過して無効になった古いトークンデータをDBに溜め込まないため、自動クリーンアップ用コマンドが用意されています。
コンソールコマンドの実行
# 手動でのクリーンアップ実行
php bin/console admin-password-recovery:cleanupcrontab への登録推奨例
# 毎日深夜 3:00 に期限切れトークンを自動削除する設定例
0 3 * * * cd /path/to/eccube && php bin/console admin-password-recovery:cleanup >> var/log/cleanup.log 2>&18データベース構成
有効化時に自動生成・拡張されるデータベーステーブル構造です。
8-1. plg_admin_password_reset_token (パスワードリセット用)
| カラム名 | 型 | 説明 |
|---|---|---|
| id | INT | 主キー |
| member_id | INT | 管理者ID (dtb_member.id) |
| token | VARCHAR(255) | SHA-256でハッシュ化されたトークン |
| expire_at | DATETIME | 失効日時 (生成から1時間) |
| created_at | DATETIME | 作成日時 |
8-2. plg_admin_email_verification_token (メールアドレス変更用)
| カラム名 | 型 | 説明 |
|---|---|---|
| id | INT | 主キー |
| member_id | INT | 管理者ID (dtb_member.id) |
| token | VARCHAR(255) | SHA-256でハッシュ化されたトークン |
| new_email | VARCHAR(255) | 変更予定の新しいメールアドレス |
| expire_at | DATETIME | 失効日時 (生成から24時間) |
| created_at | DATETIME | 作成日時 |
9よくあるご質問(FAQ)
Q1. リセットメールが届きません。
A. EC-CUBEのSMTPメール送信設定が正しく完了しているかご確認ください。また、迷惑メールフォルダへの振り分けや、管理者データ(dtb_member)にメールアドレスが登録されているかご確認ください。
Q2. トークンの有効期限を変更したい場合は?
A. `Service/PasswordResetService.php` 内の `+1 hour` や `Service/EmailVerificationService.php` 内の `+24 hours` の記述を変更することでカスタマイズ可能です。
Q3. カスタマイズの相談窓口はありますか?
A. メール文面の個別デザイン化やセキュリティ要件の追加カスタマイズは、CubeLab 公式サイトよりお気軽にお問い合わせください。