[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 <?php 2 /*************************************************************************** 3 * login.php 4 * ------------------- 5 * begin : Saturday, Feb 13, 2001 6 * copyright : (C) 2001 The phpBB Group 7 * email : support@phpbb.com 8 * 9 * $Id: login.php 6772 2006-12-16 13:11:28Z acydburn $ 10 * 11 * 12 ***************************************************************************/ 13 14 /*************************************************************************** 15 * 16 * This program is free software; you can redistribute it and/or modify 17 * it under the terms of the GNU General Public License as published by 18 * the Free Software Foundation; either version 2 of the License, or 19 * (at your option) any later version. 20 * 21 ***************************************************************************/ 22 23 // 24 // Allow people to reach login page if 25 // board is shut down 26 // 27 define("IN_LOGIN", true); 28 29 define('IN_PHPBB', true); 30 $phpbb_root_path = './'; 31 include ($phpbb_root_path . 'extension.inc'); 32 include($phpbb_root_path . 'common.'.$phpEx); 33 34 // 35 // Set page ID for session management 36 // 37 $userdata = session_pagestart($user_ip, PAGE_LOGIN); 38 init_userprefs($userdata); 39 // 40 // End session management 41 // 42 43 // session id check 44 if (!empty($HTTP_POST_VARS['sid']) || !empty($HTTP_GET_VARS['sid'])) 45 { 46 $sid = (!empty($HTTP_POST_VARS['sid'])) ? $HTTP_POST_VARS['sid'] : $HTTP_GET_VARS['sid']; 47 } 48 else 49 { 50 $sid = ''; 51 } 52 53 if( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) || isset($HTTP_POST_VARS['logout']) || isset($HTTP_GET_VARS['logout']) ) 54 { 55 if( ( isset($HTTP_POST_VARS['login']) || isset($HTTP_GET_VARS['login']) ) && (!$userdata['session_logged_in'] || isset($HTTP_POST_VARS['admin'])) ) 56 { 57 $username = isset($HTTP_POST_VARS['username']) ? phpbb_clean_username($HTTP_POST_VARS['username']) : ''; 58 $password = isset($HTTP_POST_VARS['password']) ? $HTTP_POST_VARS['password'] : ''; 59 60 $sql = "SELECT user_id, username, user_password, user_active, user_level, user_login_tries, user_last_login_try 61 FROM " . USERS_TABLE . " 62 WHERE username = '" . str_replace("\\'", "''", $username) . "'"; 63 if ( !($result = $db->sql_query($sql)) ) 64 { 65 message_die(GENERAL_ERROR, 'Error in obtaining userdata', '', __LINE__, __FILE__, $sql); 66 } 67 68 if( $row = $db->sql_fetchrow($result) ) 69 { 70 if( $row['user_level'] != ADMIN && $board_config['board_disable'] ) 71 { 72 redirect(append_sid("index.$phpEx", true)); 73 } 74 else 75 { 76 // If the last login is more than x minutes ago, then reset the login tries/time 77 if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $row['user_last_login_try'] < (time() - ($board_config['login_reset_time'] * 60))) 78 { 79 $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']); 80 $row['user_last_login_try'] = $row['user_login_tries'] = 0; 81 } 82 83 // Check to see if user is allowed to login again... if his tries are exceeded 84 if ($row['user_last_login_try'] && $board_config['login_reset_time'] && $board_config['max_login_attempts'] && 85 $row['user_last_login_try'] >= (time() - ($board_config['login_reset_time'] * 60)) && $row['user_login_tries'] >= $board_config['max_login_attempts'] && $userdata['user_level'] != ADMIN) 86 { 87 message_die(GENERAL_MESSAGE, sprintf($lang['Login_attempts_exceeded'], $board_config['max_login_attempts'], $board_config['login_reset_time'])); 88 } 89 90 if( md5($password) == $row['user_password'] && $row['user_active'] ) 91 { 92 $autologin = ( isset($HTTP_POST_VARS['autologin']) ) ? TRUE : 0; 93 94 $admin = (isset($HTTP_POST_VARS['admin'])) ? 1 : 0; 95 $session_id = session_begin($row['user_id'], $user_ip, PAGE_INDEX, FALSE, $autologin, $admin); 96 97 // Reset login tries 98 $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_login_tries = 0, user_last_login_try = 0 WHERE user_id = ' . $row['user_id']); 99 100 if( $session_id ) 101 { 102 $url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx"; 103 redirect(append_sid($url, true)); 104 } 105 else 106 { 107 message_die(CRITICAL_ERROR, "Couldn't start session : login", "", __LINE__, __FILE__); 108 } 109 } 110 // Only store a failed login attempt for an active user - inactive users can't login even with a correct password 111 elseif( $row['user_active'] ) 112 { 113 // Save login tries and last login 114 if ($row['user_id'] != ANONYMOUS) 115 { 116 $sql = 'UPDATE ' . USERS_TABLE . ' 117 SET user_login_tries = user_login_tries + 1, user_last_login_try = ' . time() . ' 118 WHERE user_id = ' . $row['user_id']; 119 $db->sql_query($sql); 120 } 121 } 122 123 $redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : ''; 124 $redirect = str_replace('?', '&', $redirect); 125 126 if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url')) 127 { 128 message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.'); 129 } 130 131 $template->assign_vars(array( 132 'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">") 133 ); 134 135 $message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); 136 137 message_die(GENERAL_MESSAGE, $message); 138 } 139 } 140 else 141 { 142 $redirect = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : ""; 143 $redirect = str_replace("?", "&", $redirect); 144 145 if (strstr(urldecode($redirect), "\n") || strstr(urldecode($redirect), "\r") || strstr(urldecode($redirect), ';url')) 146 { 147 message_die(GENERAL_ERROR, 'Tried to redirect to potentially insecure url.'); 148 } 149 150 $template->assign_vars(array( 151 'META' => "<meta http-equiv=\"refresh\" content=\"3;url=login.$phpEx?redirect=$redirect\">") 152 ); 153 154 $message = $lang['Error_login'] . '<br /><br />' . sprintf($lang['Click_return_login'], "<a href=\"login.$phpEx?redirect=$redirect\">", '</a>') . '<br /><br />' . sprintf($lang['Click_return_index'], '<a href="' . append_sid("index.$phpEx") . '">', '</a>'); 155 156 message_die(GENERAL_MESSAGE, $message); 157 } 158 } 159 else if( ( isset($HTTP_GET_VARS['logout']) || isset($HTTP_POST_VARS['logout']) ) && $userdata['session_logged_in'] ) 160 { 161 // session id check 162 if ($sid == '' || $sid != $userdata['session_id']) 163 { 164 message_die(GENERAL_ERROR, 'Invalid_session'); 165 } 166 167 if( $userdata['session_logged_in'] ) 168 { 169 session_end($userdata['session_id'], $userdata['user_id']); 170 } 171 172 if (!empty($HTTP_POST_VARS['redirect']) || !empty($HTTP_GET_VARS['redirect'])) 173 { 174 $url = (!empty($HTTP_POST_VARS['redirect'])) ? htmlspecialchars($HTTP_POST_VARS['redirect']) : htmlspecialchars($HTTP_GET_VARS['redirect']); 175 $url = str_replace('&', '&', $url); 176 redirect(append_sid($url, true)); 177 } 178 else 179 { 180 redirect(append_sid("index.$phpEx", true)); 181 } 182 } 183 else 184 { 185 $url = ( !empty($HTTP_POST_VARS['redirect']) ) ? str_replace('&', '&', htmlspecialchars($HTTP_POST_VARS['redirect'])) : "index.$phpEx"; 186 redirect(append_sid($url, true)); 187 } 188 } 189 else 190 { 191 // 192 // Do a full login page dohickey if 193 // user not already logged in 194 // 195 if( !$userdata['session_logged_in'] || (isset($HTTP_GET_VARS['admin']) && $userdata['session_logged_in'] && $userdata['user_level'] == ADMIN)) 196 { 197 $page_title = $lang['Login']; 198 include($phpbb_root_path . 'includes/page_header.'.$phpEx); 199 200 $template->set_filenames(array( 201 'body' => 'login_body.tpl') 202 ); 203 204 $forward_page = ''; 205 206 if( isset($HTTP_POST_VARS['redirect']) || isset($HTTP_GET_VARS['redirect']) ) 207 { 208 $forward_to = $HTTP_SERVER_VARS['QUERY_STRING']; 209 210 if( preg_match("/^redirect=([a-z0-9\.#\/\?&=\+\-_]+)/si", $forward_to, $forward_matches) ) 211 { 212 $forward_to = ( !empty($forward_matches[3]) ) ? $forward_matches[3] : $forward_matches[1]; 213 $forward_match = explode('&', $forward_to); 214 215 if(count($forward_match) > 1) 216 { 217 for($i = 1; $i < count($forward_match); $i++) 218 { 219 if( !ereg("sid=", $forward_match[$i]) ) 220 { 221 if( $forward_page != '' ) 222 { 223 $forward_page .= '&'; 224 } 225 $forward_page .= $forward_match[$i]; 226 } 227 } 228 $forward_page = $forward_match[0] . '?' . $forward_page; 229 } 230 else 231 { 232 $forward_page = $forward_match[0]; 233 } 234 } 235 } 236 237 $username = ( $userdata['user_id'] != ANONYMOUS ) ? $userdata['username'] : ''; 238 239 $s_hidden_fields = '<input type="hidden" name="redirect" value="' . $forward_page . '" />'; 240 $s_hidden_fields .= (isset($HTTP_GET_VARS['admin'])) ? '<input type="hidden" name="admin" value="1" />' : ''; 241 242 make_jumpbox('viewforum.'.$phpEx); 243 $template->assign_vars(array( 244 'USERNAME' => $username, 245 246 'L_ENTER_PASSWORD' => (isset($HTTP_GET_VARS['admin'])) ? $lang['Admin_reauthenticate'] : $lang['Enter_password'], 247 'L_SEND_PASSWORD' => $lang['Forgotten_password'], 248 249 'U_SEND_PASSWORD' => append_sid("profile.$phpEx?mode=sendpassword"), 250 251 'S_HIDDEN_FIELDS' => $s_hidden_fields) 252 ); 253 254 $template->pparse('body'); 255 256 include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 257 } 258 else 259 { 260 redirect(append_sid("index.$phpEx", true)); 261 } 262 263 } 264 265 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Mon Jan 14 19:21:40 2013 | Cross-referenced by PHPXref 0.7.1 |