Avatar billede nugie Nybegynder
13. september 2006 - 23:14 Der er 2 kommentarer og
1 løsning

Hvor sikkert er dette? (Logincheck, mysql)

Hey hey..

Jeg har siddet og rodet med et loginsystem som kører over mysql. Spørgsmålet er så om måden er sikker nok til at bruge eller om der kan forekomme fejl ved det.

Den tjekker om brugernavn og password findes i databasen + hvilke rettigheder de har (1 og 2)

Kan vist godt allerede nu afsløre at jeg ikke er den store haj til php :)


$bruger = $_POST['brugernavn'];
$pass = $_POST['password'];
       
$resultat = mysql_query("SELECT Id FROM `gentle_medlemmer` WHERE navn = '$bruger' AND password = '$pass'");
$number = mysql_num_rows($resultat);
   
$resultat2 = mysql_query("SELECT Id FROM `gentle_medlemmer` WHERE navn = '$bruger' AND password = '$pass' AND rettigheder = '1'");
$number2 = mysql_num_rows($resultat2);
   
$resultat3 = mysql_query("SELECT Id FROM `gentle_medlemmer` WHERE navn = '$bruger' AND password = '$pass' AND rettigheder = '2'");
$number3 = mysql_num_rows($resultat3);         
         
if($number == 1) {
$_SESSION['logget_ind'] = 1;
$_SESSION['brugernavn'] = $bruger;
$_SESSION['password'] = $pass;
    if($number2 == 1) { $_SESSION['status'] = 1; }
    elseif($number3 == 1) { $_SESSION['status'] = 2; }
    else { $_SESSION['status'] = 0; }
header("Location: login-ok.php");
Avatar billede viper_killerguy Nybegynder
13. september 2006 - 23:29 #1
Du har en antagelse om at magic quotes er sat til, hvilket ikke er en selvfølge, denne antagelse kan du imødekomme med f.eks.:
$bruger = $_POST['brugernavn'];
$pass = $_POST['password'];
if (get_magic_quotes_gpc()) {
  $bruger = stripslashes($bruger);
  $pass = stripslashes($pass);
}
$bruger = mysql_escape_string($bruger);
$pass = mysql_escape_string($bruger);

Hvis du vil udskrive $bruger eller $pass kan du kører dem igennem en htmlentities() istedet/også.
Avatar billede nugie Nybegynder
14. september 2006 - 07:39 #2
Må ærligt indrømme at jeg ikke ved hvad magic quotes er.
Jeg har søgt lidt på google og fundet ud af at det helst er en ting som man skal undgå..?
Det hele gik nu mere på om der er nogle fejl ved det så personerne uden rettigheder ligepludselig får rettighederne 2. Eller kan det ikke ske?
Avatar billede dkfire Nybegynder
16. september 2006 - 14:51 #3
I stedet for at søge i databasen 3 gange, så kan du nøjes med at søge 1 gang.
$result = mysql_query("SELECT rettigheder, Id FROM `gentle_medlemmer` WHERE navn = '$bruger' AND password = '$pass'");
Derved kan du bruge den information som står i rettigheder til at skrive i din sessionvariable., $_SESSION['status'].

if(mysql_num_rows($result) > 0)
{
$row = mysql_fetch_assoc($result);
$_SESSION['logget_ind'] = 1;
$_SESSION['brugernavn'] = $bruger;
$_SESSION['status'] = $row['rettigheder'];
header("Location: login-ok.php");
}

Jeg håber ikke der er nogen grund til at du gemmer brugerens kodeord i en sessionvariable. Af sikkerhedsgrunde burde du ikke gøre det.
En anden ting du skulle gøre, er at kryptere dine brugeres passwords, det vil øge din sikkerhed på siden.
Håber jeg har gjort mig nogenlunde forståelig.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester