Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cyberoma

[Resolvido] Sistema de Login com Niveis de Acesso (falha)

Recommended Posts

Boa noite galera, eu fiz um sistema de login com niveis de acesso, ele até que funciona bem..

 

Porem se alguem mudar a URL, pode acabar acessando a aréa de outro nivel..

Por exemplo: usuario comum loga em: site_usuario.php... se ele mudar a url pra site_adm ele acessa a area do administrador.. entenderam??

 

Não sei como corrigir isso, alguem tem alguma ideia??

 

logar.php

 

<?
$login = $_POST['login'];
$senha = md5($_POST['senha']);

include "config.php";

$sql = mysql_query("SELECT * FROM usuarios WHERE login = '$login'");
$cont = mysql_num_rows($sql);
while($linha = mysql_fetch_array($sql)){
$senha_db = $linha['senha'];
$nivel = $linha['nivel'];
$solicitante = $linha['nome'];
$local = $linha['local'];
$ramal = $linha['ramal'];
$email = $linha['email'];
}

if($cont == 0){

echo "<script>
alert(\"Login inválido\");
window.location.href=(\"login.php\");

</script>";

}else if($senha_db != $senha){
echo "<script>
alert(\"Senha inválida\");
window.location.href=(\"login.php\");

</script>";

}else{

		session_start();
$_SESSION['login_usuario'] = $login;
$_SESSION['senha_usuario'] = $senha;
$_SESSION['nome_usuario'] = $solicitante;
$_SESSION['local_usuario'] = $local;
$_SESSION['ramal_usuario'] = $ramal;
$_SESSION['id_usuario'] = $ramal;
$_SESSION['email_usuario'] = $email;

if($nivel == '2'){
header('Location:base_solucoes_adm.php');

}else if($nivel == '1'){
	header('Location:base_solucoes_especial.php');
}else{
	header('Location:base_solucoes_usuarios.php');
}
}

mysql_close($connect);

?>

 

verifica.php (coloca em todas as paginas, pra verificar se o usuario ta logado)

 

<?
session_start();

include "config.php";

if(isset($_SESSION["login_usuario"]) AND isset($_SESSION['senha_usuario'])){

$login_usuario = $_SESSION["login_usuario"];
$senha_usuario = $_SESSION["senha_usuario"];

$sql = mysql_query("SELECT * FROM usuarios WHERE login = '$login_usuario'");
$cont = mysql_num_rows($sql);
while($linha = mysql_fetch_array($sql)){
$senha_db = $linha['senha'];
}

if($cont == 0){

unset($_SESSION["login_usuario"]);
unset($_SESSION["senha_usuario"]);

echo "<script>
alert(\"Login inválido\");
window.location.href=(\"login.php\");

</script>";

}

if($senha_db != $senha_usuario){//confere senha

unset($_SESSION["login_usuario"]);
unset($_SESSION["senha_usuario"]);

echo "<script>
alert(\"Senha inválida\");
window.location.href=(\"login.php\");

</script>";

}

}else{

echo "<script>
alert(\"Login e senha inválida\");
window.location.href=(\"login.php\");

</script>";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta colocar uma condição no inicio do arquivo "site_adm".

Pelo q entendi do seu código, cada usuário tem um "nivel".

Tenta o seguinte:

 

$nivel = $_SESSION["nivel"];
$nivel_necessario=1;

if (($nivel) > ($nivel_necessario)) {
   echo "<center>Acesso negado!</center>";
   echo "<meta http-equiv='refresh' content='2;URL=sua_pagina.php'>";
   exit;
   }

 

Neste caso, se o nivel do usuario, for maior que o nivel necessario, direciona para a página que você definir.

Imagino que existam outras formas, mas esta deve funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Cyberoma,

 

já fiz algo assim, minha sugestão: inclua uma variável de sessão = 'nivel' no seu arquivo logar.php

$_SESSION['nivel'] = $nivel;

 

Em cada página do sistema inclua:

$login = $_SESSION['login'];
$nivel = $_SESSION["nivel"]; 

$nivelusu = '1'; //aqui você coloca - em cada página - o nível correto de acordo com o tipo de usuário. 

if ($_SESSION["nivel"] != $nivelusu) { 
header("Location: logout.php"); //ou redireciona para outra página qualquer.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Cyberoma,

 

já fiz algo assim, minha sugestão: inclua uma variável de sessão = 'nivel' no seu arquivo logar.php

$_SESSION['nivel'] = $nivel;

 

Em cada página do sistema inclua:

$login = $_SESSION['login'];
$nivel = $_SESSION["nivel"]; 

$nivelusu = '1'; //aqui você coloca - em cada página - o nível correto de acordo com o tipo de usuário. 

if ($_SESSION["nivel"] != $nivelusu) { 
header("Location: logout.php"); //ou redireciona para outra página qualquer.

 

Abs.

 

lusigmas,

 

usei seu codigo e funcionou xD.. facil, facil

 

Obrigadooooo, abraço irmão..

 

Tenta colocar uma condição no inicio do arquivo "site_adm".

Pelo q entendi do seu código, cada usuário tem um "nivel".

Tenta o seguinte:

 

$nivel = $_SESSION["nivel"];
$nivel_necessario=1;

if (($nivel) > ($nivel_necessario)) {
   echo "<center>Acesso negado!</center>";
   echo "<meta http-equiv='refresh' content='2;URL=sua_pagina.php'>";
   exit;
   }

 

 

Neste caso, se o nivel do usuario, for maior que o nivel necessario, direciona para a página que você definir.

Imagino que existam outras formas, mas esta deve funcionar.

 

Obrigado pela resposta, vou testar o seu tambem, mas pelo visto funciona também.. obrigado ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que gostou, o do manolegal tem a mesma lógica, pode usar qualquer um deles.

 

Só um detalhe: sou 'irmã', não 'irmão', risos.

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que bom que gostou, o do manolegal tem a mesma lógica, pode usar qualquer um deles.

 

Só um detalhe: sou 'irmã', não 'irmão', risos.

 

Abs.

 

vixi, é mesmo.. :lol:

 

malz, obrigado "irmã".

 

uhsauhsahuhsau

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você poderia postar o código include "config.php"

 

Ou se possível zipar todos estes arquivos de "login" com nível de acesso para que eu possa fazer um teste e adaptar para meu sistema.

 

Obrigado

albertopc

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.