バージョン選択

フォーラム

メニュー

オンライン状況

50 人のユーザが現在オンラインです。 (27 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 49
chantake もっと...

サイト内検索

質問 > フロント機能 > パスワード再発行ができない

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
jacopen
投稿日時: 2019/12/10 13:47
対応状況: 確認中
常連
登録日: 2008/7/7
居住地:
投稿: 38
パスワード再発行ができない
[EC-CUBE]4.0.2
[現象]

2.4系から移行した会員データで、パスワード変更をすると、ログインできなくなるという現象が出ております。
調査していますが原因がわからずこちらに投稿させていただきました。

データ移行した会員情報でログインは問題なくできているのですが、再発行を行うとログインができなくなります。

会員パスワードの変更は、下記2点で試しましたがどちらもNGでした。
・公開画面でのパスワード再発行
 →「ログイン情報をお忘れですか?」リンクから行った場合
・管理画面でのパスワード変更

データ移行後に新規会員登録をしたデータの場合は問題なく動作します。


アドバイスいただけたら嬉しいです。
よろしくお願いします。
jacopen
投稿日時: 2019/12/10 15:27
対応状況: 確認中
常連
登録日: 2008/7/7
居住地:
投稿: 38
Re: パスワード再発行ができない
これが正しいかどうかはわかりませんが、
ひとまずパスワードの再発行はできるようになりました。

データベース:dtb_cusomerテーブルの「salt」という項目で
2.4から移行したデータの「salt」には何も入っていない状態で、
新たに追加されたデータには英数字が格納されていました。

以下の記事を参考に、試しに「NULL」をセットしたところうまくいきました。
https://hsmtweb.com/ec-cube/eccube-ver-up.html


2.4から移行したほかのデータも現在「salt」項目は何も入っていない状態です。
ログインは正常に行えております。

パスワード再発行がされてもいいように、「NULL」をセットしたいのですが
正常に行えているログインができなくなってしまうのではないかと思い、調査継続しております。
ログインに影響が出ますでしょうか?
468
投稿日時: 2019/12/11 9:15
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 2643
Re: パスワード再発行ができない
2.4から移行したデータについては
NULLをセットして問題ないのではないかと思います。
(作業する前にバックアップは必須かと思いますが)

ざっとソースを見てみましたが
多分、パスワードの再発行後にログインできなくなるのは
パスワードの再発行時とログイン判定時のハッシュアルゴリズムの差が原因ではないかと思います。

再発行時の処理を追いかけていくと
パスワードを
/src/Eccube/Security/Core/Encoder/PasswordEncoder.php 104行目
でECCUBEで定義されたアルゴリズム(デフォルトはSHA256)でハッシュ化していますが

$res = hash_hmac($this->password_hash_algos, $raw.':'.$this->auth_magic, $salt);


ログイン側の処理は
/src/Eccube/Security/Core/Encoder/PasswordEncoder.php 73行目
がsaltに対してemptyで判定を行い、空文字やnullの場合
「sha1」でハッシュ化している為、
パスワードの不一致が発生しているものと思われます。
// 旧バージョン(2.11未満)からの移行を考慮
if (empty($salt)) {
    $hash = sha1($raw.':'.$this->auth_magic);
} else {
    $hash = $this->encodePassword($raw, $salt);
}


saltの値を空文字からnullに変更すると、パスワードの再発行が上手くいくようになるのは
パスワード再発行時の流れの中で
/src/Eccube/Controller/ForgotController.php 215行目
/src/Eccube/Controller/Admin/Customer/CustomerEditController.php 102行目の
if ($Customer->getSalt() === null) {

のようなsaltがnullの場合、saltに新しい値をセットするという判定処理が行われている為、
(saltが空文字の時は値はセットされない)

再発行後のパスワードはログイン時に
sha1ではなく、ECCUBEで定義されたアルゴリズム(デフォルトはSHA256)でハッシュ化されるようになり、
再発行時とログイン時のハッシュ化アルゴリズムが一致する為だと思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

jacopen
投稿日時: 2019/12/11 9:39
対応状況: −−−
常連
登録日: 2008/7/7
居住地:
投稿: 38
Re: パスワード再発行ができない
468様

引用:

468さんは書きました:
2.4から移行したデータについては
NULLをセットして問題ないのではないかと思います。
(作業する前にバックアップは必須かと思いますが)


丁寧な解説ありがとうございました。
お客様とも相談し、NULL値セットで確認してみたいと思います。


また、ご説明いただいたソースの処理を自身でも確認してみます。

このサイトは本当に勉強になります。
ありがとうございます。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

公式ストアEC-CUBE4系デザインテンプレート続々リリース中

統計情報

総メンバー数は66,433名です
総投稿数は98,294件です

投稿数ランキング

1
seasoft
7332
2
AMUAMU
2712
3
468
2643
4
nanasess
2103
5
umebius
1742
6
yuh
1612
7
red
1424
8
h_tanaka
1041
9
fukap
907
10
tsuji
863
11
shutta
835
12
tao_s
792
13 ramrun 789
14 karin 657
15 sumida 641
16
homan
633
17 DELIGHT 571
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.