Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
y0ruichi

Restrições no Log in

Recommended Posts

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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.