EC-CUBE 4.x 全バージョン対応

管理者パスワード再設定プラグイン

AdminPasswordRecovery — SHA-256トークンハッシュ化、アカウント特定防止、新旧メール二重通知を備えた堅牢なセキュリティ拡張

プラグインコード: AdminPasswordRecovery
提供元: CubeLab

1プラグイン概要

管理者パスワード再設定プラグイン(AdminPasswordRecovery)は、EC-CUBE 4.x の管理画面ログイン画面にパスワードリセット機能を追加し、同時に管理者の登録メールアドレスを安全に変更・管理するセキュリティ強化プラグインです。

万が一の管理者パスワード失念時の救済はもちろんのこと、**トークンのSHA-256ハッシュ化保存**、**アカウント存在探索攻撃(User Enumeration)への完全防護**、**メールアドレス変更時の新旧両アドレスへの緊急通知**など、エンタープライズレベルのセキュリティ基準を満たす設計になっています。

主な機能ハイライト

パスワード再設定
ログイン画面に専用リンクを自動挿入。暗号学的トークンによる1時間限定のリセットURLを発行。
メールアドレス変更管理
管理画面「システム設定」より変更申請。確認リンク経由の承認(有効期限24時間)で安全に切り替え。
アカウント特定防止
未登録メールが入力された場合も成功時と同じメッセージを表示。悪意ある第三者によるメアド存在調査を遮断。
SHA-256 ハッシュ化
データベース内には生のトークンではなくSHA-256ハッシュ値を保存。DB漏洩時にもリセットURLを復元不可。
新旧アドレス二重通知
メールアドレス変更完了時、新しいアドレスだけでなく古いアドレスへも警告通知を自動送信。不正変更を即時検知。
自動クリーンアップ
専用コンソールコマンドを提供。cronに登録することで失効した不要トークンをDBから自動クリーンアップ。

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:clear

3セキュリティアーキテクチャ (詳細)

管理者の権限を守るため、本プラグインでは以下のような先進的な安全対策が組み込まれています。

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. メールアドレス変更手順

  1. 管理画面にログインし、「システム設定」 ➔ 「メールアドレス設定」 を開きます。
  2. 新しいメールアドレスを入力し、「確認メールを送信」をクリックします。
  3. 新しいメールアドレス宛に「メールアドレス変更の確認」メールが届きます(有効期限: 24時間)。
  4. 管理画面にログインした状態で確認URLをクリックすると、メールアドレスの変更が確定します。

5-2. 不正検知のための「新旧アドレス二重通知」機構

悪意ある乗っ取りや誤設定を防ぐため、メールアドレスの変更が完了した瞬間に **2通の通知メール** がそれぞれ即座に自動送信されます:

通知先件名目的・役割
新しいメールアドレス宛【完了】メールアドレスが変更されました新しいアドレスへの正常な切り替え完了を通知します。
以前の古いメールアドレス宛【重要】メールアドレスが変更されましたセキュリティ警告通知。 もし第三者によって勝手に変更された場合、元のメールアドレスへ警告が届くため、不正アクセスを即座に発見して対処することができます。

6各種自動送信メール一覧

本プラグインが自動送信する全4種類のメールテンプレート概要です。

メールの種類件名送信タイミング
パスワードリセット依頼【重要】パスワード再設定のご案内ログイン画面からリセット申請が行われた時(トークンURL送信)
パスワード変更完了通知【重要】パスワードが変更されました新パスワードの設定が正常に完了した時(セキュリティ警告)
メールアドレス変更確認【重要】メールアドレス変更の確認管理画面から新メアドへの変更申請が行われた時(承認URL送信)
メールアドレス変更完了通知【完了】 / 【重要】メールアドレスが変更されました承認URLがクリックされ、メアド変更が確定した時(新旧両アドレス送信)

7期限切れトークンの自動削除 (cron設定)

時間が経過して無効になった古いトークンデータをDBに溜め込まないため、自動クリーンアップ用コマンドが用意されています。

コンソールコマンドの実行

# 手動でのクリーンアップ実行
php bin/console admin-password-recovery:cleanup

crontab への登録推奨例

# 毎日深夜 3:00 に期限切れトークンを自動削除する設定例
0 3 * * * cd /path/to/eccube && php bin/console admin-password-recovery:cleanup >> var/log/cleanup.log 2>&1

8データベース構成

有効化時に自動生成・拡張されるデータベーステーブル構造です。

8-1. plg_admin_password_reset_token (パスワードリセット用)

カラム名型説明
idINT主キー
member_idINT管理者ID (dtb_member.id)
tokenVARCHAR(255)SHA-256でハッシュ化されたトークン
expire_atDATETIME失効日時 (生成から1時間)
created_atDATETIME作成日時

8-2. plg_admin_email_verification_token (メールアドレス変更用)

カラム名型説明
idINT主キー
member_idINT管理者ID (dtb_member.id)
tokenVARCHAR(255)SHA-256でハッシュ化されたトークン
new_emailVARCHAR(255)変更予定の新しいメールアドレス
expire_atDATETIME失効日時 (生成から24時間)
created_atDATETIME作成日時

9よくあるご質問(FAQ)

Q1. リセットメールが届きません。

A. EC-CUBEのSMTPメール送信設定が正しく完了しているかご確認ください。また、迷惑メールフォルダへの振り分けや、管理者データ(dtb_member)にメールアドレスが登録されているかご確認ください。

Q2. トークンの有効期限を変更したい場合は?

A. `Service/PasswordResetService.php` 内の `+1 hour` や `Service/EmailVerificationService.php` 内の `+24 hours` の記述を変更することでカスタマイズ可能です。

Q3. カスタマイズの相談窓口はありますか?

A. メール文面の個別デザイン化やセキュリティ要件の追加カスタマイズは、CubeLab 公式サイトよりお気軽にお問い合わせください。