バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

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

フロント機能

新規スレッドを追加する

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

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

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

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

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


アドバイスいただけたら嬉しいです。
よろしくお願いします。
jacopen
投稿日時: 2019/12/10 15:27
対応状況: 確認中
常連
登録日: 2008/7/7
居住地:
投稿: 40
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
居住地:
投稿: 3217
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
居住地:
投稿: 40
Re: パスワード再発行ができない
468様

引用:

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


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


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

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


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,296名です
総投稿数は109,692件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

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

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