Changeset 20115
- Timestamp:
- 2011/02/09 06:02:48 (13 years ago)
- Location:
- branches/version-2_5-dev
- Files:
-
- 2 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/Smarty/templates/admin/login.tpl
r19983 r20115 30 30 <h1><img src="<!--{$TPL_URLPATH}-->img/contents/admin_login_logo.jpg" width="140" height="150" alt="EC-CUBE管理画面" /></h1> 31 31 <div id="input-form"> 32 <form name="form1" id="form1" method="post" action="login.php"> 32 <form name="form1" id="form1" method="post" action="?"> 33 <input type="hidden" name="mode" value="login" /> 34 <input type="hidden" name="<!--{$smarty.const.TRANSACTION_ID_NAME}-->" value="<!--{$transactionid}-->" /> 33 35 <p><label for="login_id">ID</label></p> 34 36 <input type="text" name="login_id" size="20" class="box25" /> -
branches/version-2_5-dev/data/class/pages/admin/LC_Page_Admin_Index.php
r19805 r20115 45 45 parent::init(); 46 46 $this->tpl_mainpage = 'login.tpl'; 47 $this->httpCacheControl('nocache'); 47 48 } 48 49 … … 53 54 */ 54 55 function process() { 55 parent::process();56 56 $this->action(); 57 57 $this->sendResponse(); … … 59 59 60 60 /** 61 * Page のアクション.62 *63 * @return void64 */65 function action() {66 $this->setTemplate(LOGIN_FRAME);67 }68 69 /**70 61 * デストラクタ. 71 62 * … … 75 66 parent::destroy(); 76 67 } 68 69 /** 70 * Page のアクション. 71 * 72 * @return void 73 */ 74 function action() { 75 // 不正アクセスチェック 76 if ($_SERVER["REQUEST_METHOD"] == "POST") { 77 if (!SC_Helper_Session_Ex::isValidToken()) { 78 SC_Utils_Ex::sfDispError(LOGIN_ERROR); 79 } 80 } 81 // パラメータ管理クラス 82 $objFormParam = new SC_FormParam(); 83 84 switch ($this->getMode()) { 85 case 'login': 86 //ログイン処理 87 $this->lfInitParam($objFormParam); 88 $objFormParam->setParam($_POST); 89 $this->arrErr = $this->lfCheckError($objFormParam); 90 if (SC_Utils_Ex::isBlank($this->arrErr)) { 91 $this->lfDoLogin($objFormParam->getValue('login_id')); 92 SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH); 93 }else{ 94 SC_Utils_Ex::sfDispError(LOGIN_ERROR); 95 } 96 break; 97 default: 98 break; 99 } 100 // トランザクションID 101 $this->transactionid = SC_Helper_Session_Ex::getToken(); 102 // 管理者ログインテンプレートフレームの設定 103 $this->setTemplate(LOGIN_FRAME); 104 } 105 106 /** 107 * パラメーター情報の初期化 108 * 109 * @param array $objFormParam フォームパラメータークラス 110 * @return void 111 */ 112 function lfInitParam(&$objFormParam) { 113 $objFormParam->addParam('ID', 'login_id', ID_MAX_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK' ,'MAX_LENGTH_CHECK')); 114 $objFormParam->addParam('PASSWORD', 'password', ID_MAX_LEN, '', array('EXIST_CHECK', 'ALNUM_CHECK', 'MAX_LENGTH_CHECK')); 115 } 116 117 /** 118 * パラメーターのエラーチェック 119 * 120 * TODO: ブルートフォースアタック対策チェックの実装 121 * 122 * @param array $objFormParam フォームパラメータークラス 123 * @return array $arrErr エラー配列 124 */ 125 function lfCheckError(&$objFormParam) { 126 // 書式チェック 127 $arrErr = $objFormParam->checkError(); 128 if(SC_Utils_Ex::isBlank($arrErr)) { 129 $arrForm = $objFormParam->getHashArray(); 130 // ログインチェック 131 if(!$this->lfIsLoginMember($arrForm['login_id'], $arrForm['password'])) { 132 $arrErr['password'] = "ログイン出来ません。"; 133 $this->lfSetIncorrectData($arrForm['login_id']); 134 } 135 } 136 return $arrErr; 137 } 138 139 /** 140 * 有効な管理者ID/PASSかどうかチェックする 141 * 142 * @param string $login_id ログインID文字列 143 * @param string $pass ログインパスワード文字列 144 * @return boolean ログイン情報が有効な場合 true 145 */ 146 function lfIsLoginMember($login_id, $pass) { 147 $objQuery =& SC_Query::getSingletonInstance(); 148 //パスワード、saltの取得 149 $cols = "password, salt"; 150 $table = "dtb_member"; 151 $where = "login_id = ? AND del_flg <> 1 AND work = 1"; 152 $arrData = $objQuery->getRow($cols, $table, $where, array($login_id)); 153 if (SC_Utils_Ex::isBlank($arrData)) { 154 return false; 155 } 156 // ユーザー入力パスワードの判定 157 if (SC_Utils_Ex::sfIsMatchHashPassword($pass, $arrData['password'], $arrData['salt'])) { 158 return true; 159 } 160 return false; 161 } 162 163 /** 164 * 管理者ログイン設定処理 165 * 166 * @param string $login_id ログインID文字列 167 * @return void 168 */ 169 function lfDoLogin($login_id) { 170 $objQuery =& SC_Query::getSingletonInstance(); 171 //メンバー情報取得 172 $cols = "member_id, authority, login_date, name"; 173 $table = "dtb_member"; 174 $where = "login_id = ?"; 175 $arrData = $objQuery->getRow($cols, $table, $where, array($login_id)); 176 // セッション登録 177 $sid = $this->lfSetLoginSession($arrData['member_id'], $login_id, $arrData['authority'], $arrData['name'], $arrData['login_date']); 178 // ログイン情報記録 179 $this->lfSetLoginData($sid, $arrData['member_id'], $login_id, $arrData['authority'], $arrData['login_date']); 180 } 181 182 /** 183 * ログイン情報セッション登録 184 * 185 * @param integer $member_id メンバーID 186 * @param string $login_id ログインID文字列 187 * @param integer $authority 権限ID 188 * @param string $login_name ログイン表示名 189 * @param string $last_login 最終ログイン日時(YYYY/MM/DD HH:ii:ss形式) またはNULL 190 * @return string $sid 設定したセッションのセッションID 191 */ 192 function lfSetLoginSession($member_id, $login_id, $authority, $login_name, $last_login) { 193 $objSess = new SC_Session(); 194 // 認証済みの設定 195 $objSess->SetSession('cert', CERT_STRING); 196 $objSess->SetSession('member_id', $member_id); 197 $objSess->SetSession('login_id', $login_id); 198 $objSess->SetSession('authority', $authority); 199 $objSess->SetSession('login_name', $login_name); 200 $objSess->SetSession('uniqid', $objSess->getUniqId()); 201 if(SC_Utils_Ex::isBlank($last_login)) { 202 $objSess->SetSession('last_login', date("Y-m-d H:i:s")); 203 }else{ 204 $objSess->SetSession('last_login', $last_login); 205 } 206 return $objSess->GetSID(); 207 } 208 209 /** 210 * ログイン情報の記録 211 * 212 * @param mixed $sid セッションID 213 * @param integer $member_id メンバーID 214 * @param string $login_id ログインID文字列 215 * @param integer $authority 権限ID 216 * @param string $last_login 最終ログイン日時(YYYY/MM/DD HH:ii:ss形式) またはNULL 217 * @return void 218 */ 219 function lfSetLoginData($sid, $member_id, $login_id, $authority, $last_login) { 220 // ログイン記録ログ出力 221 $str_log = "login: user=$login_id($member_id) auth=$authority " 222 . "lastlogin=$last_login sid=$sid"; 223 GC_Utils_Ex::gfPrintLog($str_log); 224 225 // 最終ログイン日時更新 226 $objQuery =& SC_Query::getSingletonInstance(); 227 $sqlval = array(); 228 $sqlval['login_date'] = date("Y-m-d H:i:s"); 229 $table = "dtb_member"; 230 $where = "member_id = ?"; 231 $objQuery->update($table, $sqlval, $where, array($member_id)); 232 } 233 234 /** 235 * ログイン失敗情報の記録 236 * 237 * TODO: ブルートフォースアタック対策の実装 238 * 239 * @param string $login_id ログイン失敗時に投入されたlogin_id文字列 240 * @return void 241 */ 242 function lfSetIncorrectData($error_login_id) { 243 GC_Utils_Ex::gfPrintLog($error_login_id . " password incorrect."); 244 } 77 245 } 78 246 ?> -
branches/version-2_5-dev/data/class/pages/admin/LC_Page_Admin_Logout.php
r19998 r20115 52 52 */ 53 53 function process() { 54 $this->action(); 55 } 56 57 /** 58 * Page のアクション. 59 * 60 * @return void 61 */ 62 function action() { 63 $this->lfDoLogout(); 64 // ログイン画面に遷移 65 SC_Response_Ex::sendRedirectFromUrlPath(ADMIN_DIR . DIR_INDEX_PATH); 66 } 67 68 /** 69 * ログアウト処理 70 * 71 * @return void 72 */ 73 function lfDoLogout() { 54 74 $objSess = new SC_Session(); 55 75 $objSess->logout(); 56 57 SC_Response_Ex::sendRedirectFromUrlPath(ADMIN_DIR . DIR_INDEX_PATH);58 76 } 59 77
Note: See TracChangeset
for help on using the changeset viewer.