Avatar billede kongknabe Nybegynder
13. januar 2009 - 10:57 Der er 8 kommentarer

Kritik af login script.

Hejsa.

Har siddet og rodet lidt med et login script og vil meget gerne have kommentarer til det i henhold til sikkerhed og alt andet der kunen være relevant (Er det godt, dumt, usikkert etc.?).

Scriptet er fundet på nettet og kun meget lidt ændret :)

$host="127.0.0.1"; // Host name
    $username="root"; // Mysql username
    $password=""; // Mysql password
    $db_name="test"; // Database name
    $tbl_name="members"; // Table name
   
    // Connect to server and select databse.
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
   
    // Define $myusername and $mypassword
    $myusername=$_POST['myusername'];
    $mypassword=$_POST['mypassword'];
   
    // To protect MySQL injection (more detail about MySQL injection)
    $myusername = stripslashes($myusername);
    $mypassword = stripslashes($mypassword);
    $myusername = mysql_real_escape_string($myusername);
    $mypassword = mysql_real_escape_string($mypassword);
   
    $mypassword=md5($_POST['mypassword']);
   
    $sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
    $result=mysql_query($sql);
   
    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row
   
    if($count==1){
    // Register $myusername, $mypassword and redirect to file "login_success.php"
    session_register("myusername");
    //session_register("mypassword");
    header("location:index.php?page_id=$page_id");
    }
    else {
    echo "Wrong Username or Password";
    }
Avatar billede kongknabe Nybegynder
13. januar 2009 - 11:00 #1
Er det f.eks. nødvendigt at køre "stripslashes" og "mysql_real_escape" på passwordet når det også bliver MD5 krypteret efterfølgende? - Og er "stripslashes" og "mysql_real_escape" alt hvad jeg har behov for? - Har læst nogle steder om "magic quotes" i PHP, uden helt at forstå hvad det er, samt set mange andre gøre alt muligt andet ved en streng inden de sender den til databasen...
Avatar billede nemlig Professor
13. januar 2009 - 12:26 #2
Det er ikke min stærke side, så jeg følger lidt med i denne tråd, da jeg synes spørgsmålene er interessante.
Måske du skal overveje at afsætte lidt point. Nogle af gutterne herinde tænker lidt bedre, når der er point at hente. Du kan afsætte point i menuen til venstre.
Avatar billede dkfire Nybegynder
13. januar 2009 - 12:38 #3
Som de kode er nu, så laver ikke ikke "stripslashes" og "mysql_real_escape" på dit password før du laver en md5 hash af passwordet. Det er sikkert heller ikke nødvendigt at bruge "mysql_real_escape" når du nu laver en hash.
Men det vil nok være en god ide for dig at bruge sha1 i stedet for md5, samt at tilføje en salt til kodeordet inden du tager din hash.
Avatar billede kongknabe Nybegynder
13. januar 2009 - 13:44 #4
nemlig: Du har sikkert ret.. Synes bare det er så fjollet, og en anelse irriterende det der point system :)

dkfire: Tak for dit svar. Kan du forklare hvorfor sha1 er bedre end MD5?
Avatar billede jakobdo Ekspert
13. januar 2009 - 13:45 #5
Jeg vile også smide en LIMIT 1 på din sql:
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
Avatar billede kongknabe Nybegynder
13. januar 2009 - 13:57 #6
jakobdo: Er PHP/MySQL begynder så er ikke sikker på jeg lige forstår hvad du mener?
Avatar billede dkfire Nybegynder
13. januar 2009 - 15:15 #7
sha1 har en langt bedre algoritme til udregning, samt at der findes en del som har lavet lister over hash værdier for ofte valgte ord til passwords.

Dernæst er det kommet frem på det seneste at nogle forsker at lavet en algoritme til at finde dit password ud fra hash værdien. Den er dog ikke offentliggjort endnu.

Men ved hjælp af tilføjelse af salt så øger du sandsynligheden for at dine gemte password ikke kan findes så nemt.
Der findes flere forslag til hash udregninger på php's hjemmeside:
http://dk2.php.net/manual/en/ref.hash.php
Avatar billede jakobdo Ekspert
13. januar 2009 - 15:16 #8
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
bør rettes til:
$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword' LIMIT 1";

Hvilket betyder at MYSQL ikke vil søge mere end EN bruger med netop det angivne brugernavn og kodeord.
Og man må jo formode der kun er en, hvis du har lavet din kode korrekt. :o)
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