Avatar billede ofirpeter Nybegynder
24. juli 2006 - 12:28 Der er 3 kommentarer og
2 løsninger

Sikkerhed ved login script

Hej eksperter. Jeg ønsker en vurdering af sikkerhed og funktionaliteten af følgende loginscript, og selvfølgelig forslag til forbedringer.

login.php
---------
    # Starter sessionen så vi senere kan gemme / hente variabler herfra
    session_start();
   
    $Mail = mysql_real_escape_string($_POST["Mail"]);
    $Password = md5($_POST["Password"]);
   
    # Forespørger databasen, om der er en række med brugernavnet $Username og kodeordet $Password
    $Query = mysql_query("SELECT * FROM bruger WHERE mail='". $Mail ."' AND password='". $Password ."' LIMIT 1");
   
    # Fandt vi en bruger?
    if(mysql_num_rows($Query)==1)
    {
        # Smider resultatet ind i et objekt
        $Row = mysql_fetch_object($Query);
     
        # Smider brugernavnet og kodeordet ind i sessioner
        $_SESSION['Mail'] = $mail;
        $_SESSION['Password'] = $password;
             
        $reference = $_GET["reference"];
        # Man er logget ind
        header("location: http://www.tilsalg.net"."$reference");       
        exit();
    }
    else
    {       
        $reference = $_GET["reference"];
        header("location: login.php?reference=$reference");
        exit();
    }
}

side_der_skal_beskyttes.php
--------------
session_start();
if(!isset($_SESSION['Mail'])){
        $reference = $_SERVER["PHP_SELF"];
        header("location: login.php?reference=$reference");
}

"Hemmeligt indhold"


Med venlig hilsen
Peter
Avatar billede andreas Nybegynder
24. juli 2006 - 12:53 #1
Lad være med at bruge md5 til hasing af indhold. Brug i stedet en HMAC-SAH1 funktion, du kan finde den på php.net.

Desuden skal du optimere dine SQL query mere. SELECT * er skidt. Overvej noget DISTICNT i din select også.

Måde du beskytter på, med om en session er sat er sikker nok, da sessions er server side. Jeg gør det på samme måde og fik også eksperter til at vurdere denne måde, og de sagde god god den. (Folk fra #php på Quakenet, irc)
Avatar billede andreas Nybegynder
24. juli 2006 - 13:07 #2
Desuden skal du huske at køre mysql_real_escape_string() på $_POST['Password'] også. Ellers kan du lave SQL injection.

Jeg vil råde dig til at tage et kig på http://phpsec.org/projects/guide/ - Det er en god guide som gennemgår mange sikkerhedsproblemer i php.
Avatar billede plx Nybegynder
24. juli 2006 - 13:18 #3
passwordet behøver ikke køres igennem escape funktionen, den bliver jo hashet inden den bliver indsat i sqlen

i din side_der_skal_beskyttes.php skal du nok lige huske en exit(), hvis man ikke er logget ind
Avatar billede andreas Nybegynder
24. juli 2006 - 13:46 #4
Det hedder forøvrigt HMAC-SHA1, common typo :)
Avatar billede ofirpeter Nybegynder
24. juli 2006 - 16:11 #5
Tak for det. Plx, du må gerne svare.
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