[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/ -> login.php (source)

   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('&amp;', '&', 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('&amp;', '&', 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('&amp;', '&', 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('&amp;', '&', $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('&amp;', '&', 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  ?>


Generated: Mon Jan 14 19:21:40 2013 Cross-referenced by PHPXref 0.7.1