バージョン選択

フォーラム

メニュー

オンライン状況

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

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > 管理機能 > 会員パスワード生成ロジックを作成したい

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2017/8/3 12:04
対応状況: 解決済
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
会員パスワード生成ロジックを作成したい
EC-CUBE3.0.14

別システムからの顧客データの移行で、パスワードの作成に行き詰まっています。
移行元ではパスワードは平文で扱っていました。

EC-CUBE3の会員情報更新時のパスワード生成ロジックを抜粋してパスワード作成プラグラムを作成しようとしています。

Saltの発行ロジックは次から抜粋しました。
src/Eccube/Controller/Admin/Customer/CustomerEditController.php
src/Eccube/Repository/CustomerRepository.php
vendor/symfony/security/Core/Util/SecureRandom.php

問題は、SecureRandom.php で呼んでいる関数 random_bytes() がどこに定義されているかがわからないことです。
ソース内をgrep検索したところ6件の関数定義が見つかりましたがどれが呼ばれているかわかりません。

どなたかわかりますでしょうか?

以下、作成途中のパスワード作成プラグラムです。

<?php

//step1 ここを環境に合わせて書き換える (app/config/eccube/config.yml内の値を記入)
define("AUTH_MAGIC","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define('PASSWORD_HASH_ALGOS', 'sha256');

//step2 元の平文パスワードを1行毎追記する
$parr = array(
    'password',
    '123456',
);

echo '<table border="1"><tr><td>平文パスワード</td><td>暗号化パスワード</td><td>salt</td></tr>';
foreach($parr as $k=>$v){
    $salt = createSalt(5);
    echo '<tr><td>' . $v . '</td><td>' . encryptPassword($app, $Customer) . '</td><td>' . $salt . '</td></tr>' ;
}
echo '</table>';



// 以下、EC-CUBE3.0.14のソースより抜粋

/**
 * saltを生成する
 *
 * @param $byte
 * @return string
 */
function createSalt($byte)
{
    return bin2hex(random_bytes($byte));
}

/**
 * 入力されたパスワードをSaltと暗号化する
 *
 * @param $app
 * @param  Customer $Customer
 * @return mixed
 */
function encryptPassword($app, \Eccube\Entity\Customer $Customer)
{
    $encoder = $app['security.encoder_factory']->getEncoder($Customer);

    return $encoder->encodePassword($Customer->getPassword(), $Customer->getSalt());
}

/**
 * Encodes the raw password.
 *
 * @param string $raw  The password to encode
 * @param string $salt The salt
 *
 * @return string The encoded password
 */
function encodePassword($raw, $salt)
{
    if ($salt == '') {
        $salt = 'AUTH_MAGIC';
    }
    $res = hash_hmac(PASSWORD_HASH_ALGOS, $raw . ':' . AUTH_MAGIC, $salt);

    return $res;
}


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/8/3 14:16
対応状況: −−−
一人前
登録日: 2015/8/21
居住地:
投稿: 135
Re: 会員パスワード生成ロジックを作成したい
random_bytesはphpの標準関数ですね。
http://php.net/manual/ja/function.random-bytes.php

これはphp7から追加された関数です。php7で実行する場合は特に意識する必要はないです。

grepで引っかかるのは、たぶんparagonie/random_compatで提供されてるものかなと思います。
これは新しく追加された関数をphpの下位バージョンでも使えるようにしてくれるライブラリです。
実行する環境に応じて適切な関数呼び出しをしてくれます。

https://github.com/paragonie/random_compat

なのでrandom_byteは特に気にしなくてもよいのかなと思います。
h_tanaka
投稿日時: 2017/8/3 14:38
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 会員パスワード生成ロジックを作成したい
nyorai さん、
まさにおっしゃるとおりです。

ただ、PHPのバージョンを7で試してみると HTTP ERROR 500 が発生してしまいます。


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

h_tanaka
投稿日時: 2017/8/3 14:40
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 会員パスワード生成ロジックを作成したい
php5 で実行したときに問題になっているのは、random_bytes($byte) がうまく実行できていないことです。
echo random_bytes($byte);
としても画面上に何も表示されません。
try catch しても例外は発生していませんでした。


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/8/3 14:44
対応状況: −−−
一人前
登録日: 2015/8/21
居住地:
投稿: 135
Re: 会員パスワード生成ロジックを作成したい
どんなエラーが発生しているかわかりますか?

あと、ec-cubeとは関係のない箇所に配置して、このスクリプトを単独で動かしている感じでしょうか?
h_tanaka
投稿日時: 2017/8/3 14:50
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 会員パスワード生成ロジックを作成したい
いいえ、どんなエラーが発生しているかはわかりません。

はい、EC-CUBEと別のディレクトリにプログラムを配置して動かしています。


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/8/3 15:33
対応状況: −−−
一人前
登録日: 2015/8/21
居住地:
投稿: 135
Re: 会員パスワード生成ロジックを作成したい
ありがとうございます。

php5は、paragonie/random_compatをインストールしてrequireしないと動かないです。

https://github.com/paragonie/random_compat/releases
から、Version 2.0.10のSource Code(Zip)をダウンロードして展開する。


<?php
require './random_compat-2.0.10/lib/random.php';

ini_set('display_errors', 'On');
error_reporting(E_ALL);

echo random_bytes(10);


で一度試してもらえませんか。
h_tanaka
投稿日時: 2017/8/3 15:58
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 会員パスワード生成ロジックを作成したい
nyorai さん
ありがとうございます!

ご提示のとおりに paragonie/random_compat をrequireしたらうまく動きました!

ただ、暗号化が正しく行われているかを確認するために、既存の会員情報レコードの salt を $salt に代入して実行したところ、DBに保存されている password とは異なるパスワードが生成されてしまいました。
なにかロジックが間違っているのでしょうか...?

<?php

header('Content-Type: text/html; charset=UTF-8');
ini_set('display_errors', 'On');
error_reporting(E_ALL);

//step1 ここを環境に合わせて書き換える (app/config/eccube/config.yml内の値を記入)
define("AUTH_MAGIC","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
define('PASSWORD_HASH_ALGOS', 'sha256');

//step2 元の平文パスワードを1行毎追記する
$parr = array(
    'password',
    '123456',
);

echo '<table border="1"><tr><td>平文パスワード</td><td>暗号化パスワード</td><td>salt</td></tr>';
foreach($parr as $k=>$v){
    $salt = createSalt(5);
    echo '<tr><td>' . $v . '</td><td>' . encodePassword($v, $salt) . '</td><td>' . $salt . '</td></tr>' ;
}
echo '</table>';



// 以下、EC-CUBE3.0.14のソースより抜粋

/**
 * saltを生成する
 *
 * @param $byte
 * @return string
 */
function createSalt($byte)
{
    require './random_compat-2.0.10/lib/random.php';

    return bin2hex(random_bytes($byte));
}

/**
 * Encodes the raw password.
 *
 * @param string $raw  The password to encode
 * @param string $salt The salt
 *
 * @return string The encoded password
 */
function encodePassword($raw, $salt)
{
    if ($salt == '') {
        $salt = 'AUTH_MAGIC';
    }
    $res = hash_hmac(PASSWORD_HASH_ALGOS, $raw . ':' . AUTH_MAGIC, $salt);

    return $res;
}


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

nyorai
投稿日時: 2017/8/4 11:02
対応状況: −−−
一人前
登録日: 2015/8/21
居住地:
投稿: 135
Re: 会員パスワード生成ロジックを作成したい
手元の環境では同じものが生成できているようにみえます。

以下の手順で試しました。

- EC-CUBE環境で、パスワードは「password」で会員登録を行う
- 登録した会員情報のsalt値を使ってこのスクリプトを実行

AUTH_MAGICが間違ってたり、パスワードを入力間違いしてたりなどはありませんか?
h_tanaka
投稿日時: 2017/8/4 19:04
対応状況: −−−
仙人
登録日: 2016/7/22
居住地: 愛媛県
投稿: 306
Re: 会員パスワード生成ロジックを作成したい
他のデータベースと照らしてみたら合ってました!
最初に参照したデータはパスワードか何か間違ってたのだと思います。

nyorai さん
ありがとうございました!


----------------
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は19,752名です
総投稿数は82,452件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1632
4
yuh
1388
5
red
1064
6
fukap
907
7
shutta
827
8 ramrun 789
9
tsuji
784
10
umebius
712
11
tao_s
651
12 sumida 638
13
homan
633
14
468
630
15 karin 609
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEガイドブック
Copyright© LOCKON CO.,LTD. All Rights Reserved.