Session "Leak"

1

Something strange happened while we were ratifying the system on the NET.

Well, every time a user logs into the system, I store his ID as follows:

$_SESSION['usuario']['uid'] = $id_user;

and direct it to index.php

header('location:index.php'); die();

Something happened, once, that left me with some trepidation.

The user CARLOS logged in the system, and when JOÃO was to log in, typed user and password and entered as if it were CARLOS, and even stranger is that when USER TAVAREZ typed to the system IP, neither on the screen of login he stopped, he was redirected directly to INDEX as CARLOS.

What can I do to prevent this type of occurrence?

I'm using PHP / MySQLi

As stated, below Authentication code:

if(isset($_POST["signup"])){

  $user = filter_var($_POST['matricula']);
  $senha = md5(filter_var($_POST['password']));
  $captcha = strtoupper($_POST['captcha']);

  if(!isset($_SESSION['captcha'])){
    $_SESSION['captcha'] = 123456;
  }

  if($_SESSION['captcha'] <> $captcha){ // Captcha não bate
    $_SESSION['erro'] = 'captcha';
  }

  else{ // verificação do captcha OK        
    unset($_SESSION['captcha']); // limpo a sessão

    if ($stmt = $mysqli->prepare("SELECT s.id_servidor, s.matricula, s.senha, s.fnome, s.alias, s.celular1, s.email, s.nascimento,s.id_status, s.id_perfil, s.foto, s.extensao, l.ultimo_acesso, l.tentativas, l.block, d.id_setor_real FROM tbl_servidores s, tbl_login l, tbl_dados_profissionais d WHERE s.id_servidor = l.id_servidor and s.id_servidor = d.id_servidor and s.matricula = ?")){
      $stmt->bind_param('s', $user);
      $stmt->execute();
      $stmt->store_result();

      if($stmt->num_rows == 1){ //Achei matricula no banco
        $stmt->bind_result($id_user, $matricula_user, $senha_user, $nome_user, $alias_user, $celular1_user, $email_user, $nascimento_user, $id_status_user, $id_perfil_user, $foto_user, $extensao_user, $ultimo_acesso_user, $tentativas, $block_user, $id_setor);
        $stmt->fetch();
        $stmt->close();

        if ($senha == $senha_user) {//senha OK

          if($block_user <> 's' and ($id_status_user == 1 or $id_status_user == 3) ){ // verifico se usuario não está bloqueado E status ativo.
            $_SESSION['usuario']['uid'] = $id_user; // gravo sessao

            if($ultimo_acesso_user =='0000-00-00 00:00:00'){//primeira vez
                $ultimo_acesso_user = date("Y/m/d H:i:s");  
            }

            $_SESSION['usuario']['ultimo_acesso'] = $ultimo_acesso_user;
            $_SESSION['tempolimite']=time()+$limite;

            if ($sqlupdate = $mysqli->prepare("UPDATE tbl_login SET ultimo_acesso = NOW(), registration_ip = '$ip', tentativas = 0, flag = 1 where id_servidor = '$id_user'")) {
            $sqlupdate->execute();
            $sqlupdate->close();
            }

            unset($_SESSION['contador']);
            unset($_SESSION['erro']);

            header('location:index.php'); die();// mando pro index
          }

          else{

            if($block_user == 's'){
             $_SESSION['erro'] = 'block';   
            }                       
            else{
             $_SESSION['erro'] = 'inativo';
            }
          }

       }//fim else senha == $senha_user

       else{ // errou a senha

         if($block_user == 'n'){
           $_SESSION['erro'] = 'erro_login';
           $qtde_tentativa = $tentativas + 1;

           if($qtde_tentativa == 10){
              $data = date("Y/m/d H:i:s");
              $chave = $id_user.$data;
              $hash = md5($chave);

              $sqlupdate = $mysqli->prepare("UPDATE tbl_login SET tentativas = 10, registration_ip = '$ip', block = 's' , hash_desbloqueio = '$hash' where id_servidor = '$id_user'");
              $sqlupdate->execute();
              $sqlupdate->close();

              //envia sms e/ou email
              $variavel_msg = 'bloqueado';
              date_default_timezone_set('Brazil/East');
              $final1 = date('dmy');
              $final2 = date('His');
              $id_serv_rem = $id_user;
              $id = $id_serv_rem.$final1.$final2;

              include ("mensagens/email.php");
              include ("mensagens/sms.php");
              $_SESSION['erro'] = 'block';

            }

            else{

              $sqlupdate = $mysqli->prepare("UPDATE tbl_login SET tentativas = '$qtde_tentativa' where id_servidor = '$id_user'");
              $sqlupdate->execute();
              $sqlupdate->close();

            }

          }

          else{
            $_SESSION['erro'] = 'block';
          }

        }

      }

      else{

       $_SESSION['erro'] = 'erro_login';

       if(!isset($_SESSION['contador'])){
         $_SESSION['contador'] = 0;
       }

       $_SESSION['contador'] = $_SESSION['contador'] + 1;
       $qtde_tentativa = $_SESSION['contador'];

       if($_SESSION['contador'] >= 3){
          unset($_SESSION['contador']);
          header('location:block_1.php'); die();

       }

    }

}

else{

  $_SESSION['erro'] = 'erro_sql';
}

}

}

    
asked by anonymous 13.11.2014 / 15:02

0 answers