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';
}
}
}