Ignore:
Timestamp:
2011/01/19 19:47:07 (13 years ago)
Author:
AMUAMU
Message:

#818 (パスワードリマインダの答えのハッシュ暗号化) の解決
#819 (パスワードのハッシュ暗号化の強化) の解決
#335 (パスワードリマインダの改修) の準備修正
#895 (会員登録完了ページのタイトル異常) の解決
#899 (会員登録時にパスワードが正しく登録されない) の解決
#744 (PHP4 互換用途ソースを将来的に切り捨てやすい仕組みづくり) 関連の修正も含む

Location:
branches/version-2_5-dev/data
Files:
12 added
10 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_5-dev/data/class/SC_Customer.php

    r19860 r19986  
    5151 
    5252        // パスワードが合っていれば顧客情報をcustomer_dataにセットしてtrueを返す 
    53         if ( sha1($pass . ":" . AUTH_MAGIC) == $data['password'] ){ 
     53        if ( SC_Utils_Ex::sfIsMatchHashPassword($pass, $data['password'], $data['salt']) ) { 
    5454            $this->customer_data = $data; 
    5555            $this->startSession(); 
     
    150150 
    151151        // パスワードが合っている場合は、顧客情報をcustomer_dataに格納してtrueを返す。 
    152         if (sha1($pass . ':' . AUTH_MAGIC) == @$data['password']) { 
     152        if ( SC_Utils_Ex::sfIsMatchHashPassword($pass, $data['password'], $data['salt']) ) { 
    153153            $this->customer_data = $data; 
    154154            $this->startSession(); 
  • branches/version-2_5-dev/data/class/helper/SC_Helper_Customer.php

    r19892 r19986  
    4646 
    4747        foreach ($arrRegistColumn as $data) { 
    48             if ($data["column"] != "password") { 
     48            if ($data["column"] != "password" && $data["column"] != "reminder_answer" ) { 
    4949                if($array[ $data['column'] ] != "") { 
    5050                    $arrRegist[ $data["column"] ] = $array[ $data["column"] ]; 
     
    6161 
    6262        //-- パスワードの更新がある場合は暗号化。(更新がない場合はUPDATE文を構成しない) 
    63         if ($array["password"] != DEFAULT_PASSWORD) $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC); 
     63        $salt = ""; 
     64        if ($array["password"] != DEFAULT_PASSWORD) { 
     65            $salt = SC_Utils_Ex::sfGetRandomString(10); 
     66            $arrRegist["salt"] = $salt; 
     67            $arrRegist["password"] = SC_Utils_Ex::sfGetHashString($array["password"], $salt); 
     68        } 
     69        if ($array["reminder_answer"] != DEFAULT_PASSWORD) { 
     70            if($salt == "") { 
     71                $salt = $objQuery->get("salt", "dtb_customer", "customer_id = ? ", array($array['customer_id'])); 
     72            } 
     73            $arrRegist["reminder_answer"] = SC_Utils_Ex::sfGetHashString($array["reminder_answer"], $salt); 
     74        } 
     75         
    6476        $arrRegist["update_date"] = "NOW()"; 
    6577         
     
    8294         
    8395        //-- パスワードの更新がある場合は暗号化 
    84         if ($array["password"] != DEFAULT_PASSWORD){ 
    85             $array["password"] = sha1($array["password"] . ":" . AUTH_MAGIC); 
     96        $salt = ""; 
     97        if ($array["password"] != DEFAULT_PASSWORD) { 
     98            $salt = SC_Utils_Ex::sfGetRandomString(10); 
     99            $array["salt"] = $salt; 
     100            $array["password"] = SC_Utils_Ex::sfGetHashString($array["password"], $salt); 
    86101        } else { 
    87102            unset($array["password"]); 
     103        } 
     104        if ($array["reminder_answer"] != DEFAULT_PASSWORD) { 
     105            if(is_numeric($customer_id) and $salt == "") { 
     106                $salt = $objQuery->get("salt", "dtb_customer", "customer_id = ? ", array($array['customer_id'])); 
     107            } 
     108            $array["reminder_answer"] = SC_Utils_Ex::sfGetHashString($array["reminder_answer"], $salt); 
    88109        } 
    89110        
  • branches/version-2_5-dev/data/class/pages/admin/LC_Page_Admin_Login.php

    r19943 r19986  
    102102    /* 認証パスワードの判定 */ 
    103103    function fnCheckPassword(&$objQuery) { 
    104         $sql = "SELECT member_id, password, authority, login_date, name FROM dtb_member WHERE login_id = ? AND del_flg <> 1 AND work = 1"; 
     104        $sql = "SELECT member_id, password, salt, authority, login_date, name FROM dtb_member WHERE login_id = ? AND del_flg <> 1 AND work = 1"; 
    105105        $arrcol = array ($_POST['login_id']); 
    106106        // DBから暗号化パスワードを取得する。 
     
    108108        // パスワードの取得 
    109109        $password = $data_list[0]['password']; 
     110        // saltの取得 
     111        $salt = $data_list[0]['salt']; 
    110112        // ユーザ入力パスワードの判定 
    111         $ret = sha1($_POST['password'] . ":" . AUTH_MAGIC); 
    112  
    113         if ($ret == $password) { 
     113        if (SC_Utils_Ex::sfIsMatchHashPassword($_POST['password'], $password, $salt)) { 
    114114               // セッション登録 
    115115            $this->fnSetLoginSession($data_list[0]['member_id'], $data_list[0]['authority'], $data_list[0]['login_date'], $data_list[0]['name']); 
  • branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_Customer.php

    r19829 r19986  
    183183        } 
    184184 
    185         //-- パスワードの更新がある場合は暗号化。(更新がない場合はUPDATE文を構成しない) 
    186         if ($array["password"] != DEFAULT_PASSWORD) { 
    187             $arrRegist["password"] = sha1($array["password"] . ":" . AUTH_MAGIC); 
    188         } else { 
    189             unset($arrRegist['password']); 
    190         } 
     185        //-- パスワード/リマインダーの答え暗号化。 
     186        $salt = SC_Utils_Ex::sfGetRandomString(10); 
     187        $arrRegist["salt"] = $salt; 
     188        $arrRegist["password"] = SC_Utils_Ex::sfGetHashString($array["password"], $salt); 
     189        $arrRegist["reminder_answer"] = SC_Utils_Ex::sfGetHashString($arrRegist["reminder_answer"], $salt); 
    191190 
    192191        $arrRegist["update_date"] = "Now()"; 
     
    273272        $objErr->doFunc(array("ご性別", "sex") ,array("SELECT_CHECK", "NUM_CHECK")); 
    274273        $objErr->doFunc(array("ご職業", "job") ,array("NUM_CHECK")); 
    275         if ($array["password"] != DEFAULT_PASSWORD) { 
    276             $objErr->doFunc(array("パスワード", 'password', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "ALNUM_CHECK", "NUM_RANGE_CHECK")); 
    277         } 
     274        $objErr->doFunc(array("パスワード", 'password', PASSWORD_LEN1, PASSWORD_LEN2), array("EXIST_CHECK", "ALNUM_CHECK", "NUM_RANGE_CHECK")); 
    278275        $objErr->doFunc(array("パスワードを忘れたときのヒント 質問", "reminder") ,array("SELECT_CHECK", "NUM_CHECK")); 
    279276        $objErr->doFunc(array("パスワードを忘れたときのヒント 答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
  • branches/version-2_5-dev/data/class/pages/admin/customer/LC_Page_Admin_Customer_Edit.php

    r19892 r19986  
    150150 
    151151            $this->list_data["password"] = DEFAULT_PASSWORD; 
     152            $this->list_data["reminder_answer"] = DEFAULT_PASSWORD; 
    152153            //DB登録のメールアドレスを渡す 
    153154            $this->tpl_edit_email = $result[0]['email']; 
     
    294295        } 
    295296        $objErr->doFunc(array("パスワードを忘れたときのヒント 質問", "reminder") ,array("SELECT_CHECK", "NUM_CHECK")); 
    296         $objErr->doFunc(array("パスワードを忘れたときのヒント 答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
     297        if ($array["reminder_answer"] != DEFAULT_PASSWORD) { 
     298            $objErr->doFunc(array("パスワードを忘れたときのヒント 答え", "reminder_answer", STEXT_LEN) ,array("EXIST_CHECK", "MAX_LENGTH_CHECK")); 
     299        } 
    297300        $objErr->doFunc(array("メールマガジン", "mailmaga_flg") ,array("SELECT_CHECK", "NUM_CHECK")); 
    298301        $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_DATE")); 
  • branches/version-2_5-dev/data/class/pages/admin/system/LC_Page_Admin_System_Input.php

    r19977 r19986  
    365365 
    366366        // INSERTする値を作成する. 
     367        $salt                  = SC_Utils_Ex::sfGetRandomString(10); 
    367368        $sqlVal = array(); 
    368369        $sqlVal['name']        = $arrMemberData['name']; 
    369370        $sqlVal['department']  = $arrMemberData['department']; 
    370371        $sqlVal['login_id']    = $arrMemberData['login_id']; 
    371         $sqlVal['password']    = sha1($arrMemberData['password'] . ':' . AUTH_MAGIC); 
     372        $sqlVal['password']    = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt); 
     373        $sqlVal['salt']        = $salt; 
    372374        $sqlVal['authority']   = $arrMemberData['authority']; 
    373375        $sqlVal['rank']        = $objQuery->max('rank', 'dtb_member') + 1; 
     
    401403        $sqlVal['update_date'] = 'NOW()'; 
    402404        if($arrMemberData['password'] != DUMMY_PASS) { 
    403             $sqlVal['password'] = sha1($arrMemberData['password'] . ":" . AUTH_MAGIC); 
     405            $salt = SC_Utils_Ex::sfGetRandomString(10); 
     406            $sqlVal['salt']     = $salt; 
     407            $sqlVal['password'] = SC_Utils_Ex::sfGetHashString($arrMemberData['password'], $salt); 
    404408        } 
    405409 
  • branches/version-2_5-dev/data/class/pages/mypage/LC_Page_Mypage_Change.php

    r19893 r19986  
    160160            $this->arrForm['password'] = DEFAULT_PASSWORD; 
    161161            $this->arrForm['password02'] = DEFAULT_PASSWORD; 
     162            $this->arrForm['reminder_answer'] = DEFAULT_PASSWORD; 
    162163        } 
    163164        $this->transactionid = SC_Helper_Session_Ex::getToken(); 
     
    219220        $objErr = new SC_CheckError($arrRet); 
    220221        $objErr->arrErr = $this->objFormParam->checkError(); 
     222        if(isset($objErr->arrErr['password']) and $arrRet['password'] == DEFAULT_PASSWORD) { 
     223            unset($objErr->arrErr['password']); 
     224            unset($objErr->arrErr['password02']); 
     225        } 
     226        if(isset($objErr->arrErr['reminder_answer']) and $arrRet['reminder_answer'] == DEFAULT_PASSWORD) { 
     227            unset($objErr->arrErr['reminder_answer']); 
     228        } 
    221229                         
    222230        $objErr->doFunc(array("お電話番号", "tel01", "tel02", "tel03"),array("TEL_CHECK")); 
     
    224232        $objErr->doFunc(array("生年月日", "year", "month", "day"), array("CHECK_BIRTHDAY")); 
    225233        if ($this->isMobile === false){ 
    226             $objErr->doFunc(array('パスワード', 'パスワード(確認)', "password", "password02") ,array("EQUAL_CHECK")); 
     234            if( $arrRet['password'] != DEFAULT_PASSWORD ) { 
     235                $objErr->doFunc(array('パスワード', 'パスワード(確認)', "password", "password02") ,array("EQUAL_CHECK")); 
     236            } 
    227237            $objErr->doFunc(array('メールアドレス', 'メールアドレス(確認)', "email", "email02") ,array("EQUAL_CHECK")); 
    228238            $objErr->doFunc(array("FAX番号", "fax01", "fax02", "fax03") ,array("TEL_CHECK")); 
  • branches/version-2_5-dev/data/class/util/SC_Utils.php

    r19972 r19986  
    22472247        return true; 
    22482248    } 
     2249 
     2250    /** 
     2251     * パスワードのハッシュ化 
     2252     * 
     2253     * @param string $str 暗号化したい文言 
     2254     * @param string $salt salt 
     2255     * @return string ハッシュ暗号化された文字列 
     2256     */ 
     2257    function sfGetHashString($str, $salt) { 
     2258        $res = ''; 
     2259        if ($salt == '') { 
     2260            $salt = AUTH_MAGIC; 
     2261        } 
     2262        if ( AUTH_TYPE == 'PLAIN') { 
     2263            $res = $str; 
     2264        } else { 
     2265            $res = hash_hmac(PASSWORD_HASH_ALGOS, $str . ":" . AUTH_MAGIC, $salt); 
     2266        } 
     2267        return $res; 
     2268    } 
     2269     
     2270    /** 
     2271     * パスワード文字列のハッシュ一致判定 
     2272     * 
     2273     * @param string $pass 確認したいパスワード文字列 
     2274     * @param string $hashpass 確認したいパスワードハッシュ文字列 
     2275     * @param string $salt salt 
     2276     * @return boolean 一致判定 
     2277     */ 
     2278    function sfIsMatchHashPassword($pass, $hashpass, $salt) { 
     2279        $res = false; 
     2280        if ($hashpass != '') { 
     2281            if (AUTH_TYPE == 'PLAIN') { 
     2282                if($pass === $hashpass) { 
     2283                    $res = true; 
     2284                } 
     2285            } else { 
     2286                $hash = SC_Utils_Ex::sfGetHashString($pass, $salt); 
     2287                if($hash === $hashpass) { 
     2288                    $res = true; 
     2289                } 
     2290            } 
     2291        } 
     2292        return $res; 
     2293    } 
     2294     
     2295 
    22492296} 
    22502297?> 
  • branches/version-2_5-dev/data/mtb_constants_init.php

    r19972 r19986  
    1414/** ユーザー作成ページ等 */ 
    1515define('USER_URL', HTTP_URL . USER_DIR); 
    16 /** 認証用 magic */ 
    17 define('AUTH_MAGIC', "31eafcbd7a81d7b401a7fdc12bba047c02d1fae6"); 
     16/** 認証方式 */ 
     17define('AUTH_TYPE', "HMAC"); 
    1818/** テンプレートファイル保存先 */ 
    1919define('USER_TEMPLATE_DIR', "templates/"); 
     
    9191define('OPTION_CLASS_REGIST', 1); 
    9292/** 会員登録変更(マイページ)パスワード用 */ 
    93 define('DEFAULT_PASSWORD', "UAhgGR3L"); 
     93define('DEFAULT_PASSWORD', "********"); 
    9494/** 別のお届け先最大登録数 */ 
    9595define('DELIV_ADDR_MAX', 20); 
  • branches/version-2_5-dev/data/require_base.php

    r19805 r19986  
    2525    define("DATA_REALDIR", HTML_REALDIR . HTML2DATA_DIR); 
    2626} 
     27// PHP4互換用関数読み込み(PHP_Compat) 
     28require_once(DATA_REALDIR . "require_compat.php"); 
    2729 
    2830// アプリケーション初期化処理 
Note: See TracChangeset for help on using the changeset viewer.