Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

y0ruichi

Restrições no Log in

Mensagens Recomendadas

y0ruichi

Boas.

A minha duvida é como que se faz as restiçoes no log in, ou seja, se o utilizador é o administrador terá acesso a pagina de admin, se é um utilizador com restições terá outra pagina com apenas alguns acessos.

O codigo que tenho neste momento:

<?PHP 

$username=$_POST['username'];
$password=$_POST['password'];


if (!isset($username) || !isset($password)) { 
$erro = "<center><u>Por favor, preencha os campos <b>Username</b>" .
	" e <b>Password</b></u><br>";
require("log.php");
exit;	
} 

elseif (empty($username) || empty($password)) { 
$erro = "<center><u>Por favor, preencha os campos <b>Username</b>" .
	" e <b>Password</b></u><br>";
require("log.php");
exit;
} 
else
{ 


$user = addslashes($_POST['username']); 	// add slashes to the username  
$pass = ($_POST['password']);  			



$dbHost = "xxxx"; 
$dbUser = "xxxx"; 
$dbPass = "xxxx"; 
$dbDatabase = "xxxx"; 



$db = mysql_connect($dbHost, $dbUser, $dbPass) or die ("Erro ao conectar à base de dados."); 

mysql_select_db($dbDatabase, $db) or die ("Couldn't select the database."); 

$result=mysql_query("select * from utilizadores where username='$user' AND password='$pass'", $db); 



$rowCheck = mysql_num_rows($result); 
if($rowCheck > 0){

while($row = mysql_fetch_array($result)){ 


$userid=mysql_result($result,0,"username");	
session_start(); 

$_SESSION['username'] = $username;
$_SESSION['userid']= $userid;


header( "Location: www.sapo.pt" ); 

  } 

  } 
  else { 

$erro = "<center><u>Dados incorrectos, por favor tente novamente</u><br>";
require("log.php");
exit;
  } 
  
  
  } 
  ?> 

Ainda estou em fases de testes por isso alguns links ainda não estão direccionados para o destino correcto

Aguardo resposta.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IceBrain

Vejo três problemas com esse código:

As variáveis vindas do "exterior" (GET, POST, SESSION, etc) não podem ser passadas directamente para a query! Senão, podes ser atacado utilizando SQL Injection: http://www.portugal-a-programar.pt/forums/topic/0-find-topic/?do=findComment&comment=54022

As passwords não devem ser guardadas em texto normal, e sim passadas por uma hash (md5, sha).

Se guarda o ID autenticado numa $_SESSION, esta vai ser guardada numa cookie; visto que é só saber o username e userid, um atacante só precisa de mudar a cookie para o username e userid de um administrador e está logado!

Eu diria que seria preferível utilizar um módulo de autenticação bem testado como o PEAR::Auth ou o LiveUser. Há uma lista de módulos aqui.


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.