Toon posts:

[php] inlog met MD5

Pagina: 1
Acties:
  • 55 views sinds 30-01-2008

Verwijderd

Topicstarter
He,
Ik heb dus een inlog script met codering van MD5. En nu wilde ik het inloggen gaan testen, maar zei die dat het paswoord niet overeen kwam met het wachtwoord. Terwijl het wel klopt.
PHP:
1
<?function password($username, $password) { // <---    verbind();    $pass_uit_database = "";    $query = "SELECT password FROM leden WHERE username = '$username'ORDER BY id"; // <---    $resultaat = mysql_query($query) or die(mysql_error());    if ($row = mysql_fetch_object($resultaat))    {        if(md5($password)== "$row->password") {            return TRUE;        }        else {            echo "De combinatie tussen je paswoord en je gebruikersnaam is niet juist.";            echo "<br>".md5($password)."<br>";            echo "$row->password";            return FALSE;        }    }    else {        echo "Je gebruikersnaam is ongelding";        return FALSE;    }}?>

Dit is het stukje waar ik het mee check pf het paswoord en de gebruikersnaam overeen komen.
En nu ging ik dus inloggen:
Dit is het ingevulde paswoord:
d41d8cd98f00b204e9800998ecf8427e
En dit uit de db.
cfdaa8b7f5d2892fc7b6297a3f3b6517

Maar ze kloppen helemaal niet. hoe komt dat doe ik wat fout ik weet het niet meer ik ben radeloos. Iemand ie me kan helpen?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Hoofdletters/kleine letters etc wel hetzelfde :?

Verwijderd

code:
1
if(md5($password)== "$row->password") {

Daar moet je altijd mee uitkijken. Gebruik nooit " als dat niet nodig is, probeer dit:
code:
1
if(md5($password)== $row->password) {

Verwijderd

waarom staat er een order by id in je query en waarom staat die order bij aan je username='$username' vast?

Verwijderd

idd, die ORDER BY kan er uit, maar dat is het probleem niet :)

Verwijderd

Je kunt beter gewoon dit doen:
PHP:
1
<?// connectie e.d.$pass_md5 = md5($password);$query = mysql_query("SELECT * FROM tabel WHERE username='$username' AND password='$pass_md5'")or die(mysql_error());$resultaat = mysql_num_rows($query);if($resultaat == "1") {echo "Ok...";}else {echo "Fout...";}?>

Verwijderd

Topicstarter
Ik heb beide goed gecheckt. En het werkt nog niet. Heel vreemd.
Het word zo trouwens in de db gedaan misschien zit daar iets niet goed:
PHP:
1
<?if ($HTTP_POST_VARS["username"] &amp;&amp; $HTTP_POST_VARS["password"]) {    include ("functie.php3");        verbind();    $query = "SELECT * FROM leden WHERE username LIKE '$username' ORDER BY id DESC";    $resultaat = mysql_query($query) or die(mysql_error());    if ($row = mysql_fetch_object($resultaat)) {        echo "Probeer een anderen gebruikersnaam!";    }    else {$password=md5($password); // <---------------        $query = "INSERT INTO leden (username,password) VALUES ('$username','$password')";        mysql_query($query) or die ("fout in query");    echo "succesvol toegevoegd<br><br>";    echo "<a href=\"login.php3\">inloggen</a>";    }}?>

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Weet je zeker dat n biede gevallen $password hetzelfde is?

In/exclusief slashes etc?

Verwijderd

Op woensdag 13 maart 2002 15:07 schreef Markuz het volgende:
$resultaat == "1"
Waarom stopt iedereen numerieke waarden toch altijd tussen aanhalingstekens?

Verwijderd

Topicstarter
Op woensdag 13 maart 2002 15:09 schreef ACM het volgende:
Weet je zeker dat n biede gevallen $password hetzelfde is?

In/exclusief slashes etc?
Jeb overal is het password als het erin word gedaan en als het eruit word gehaald.

Verwijderd

Op woensdag 13 maart 2002 15:07 schreef Markuz het volgende:
Je kunt beter gewoon dit doen:
PHP:
1
<?// connectie e.d.$pass_md5 = md5($password);$query = mysql_query("SELECT * FROM tabel WHERE username='$username' AND password='$pass_md5'")or die(mysql_error());$resultaat = mysql_num_rows($query);if($resultaat == "1") {echo "Ok...";}else {echo "Fout...";}?>
Maar dán kun je het net zo goed nog korter maken...
PHP:
1
<?function verify_login($username, $password) {    $res = mysql_query("SELECT username FROM table WHERE username = '$username' AND password = '" . md5($password) . "'");    return mysql_fetch_row($res);}if($user = verify_login('$username', '$password')){echo "ingelogd...";}else{echo "niet ingelogd...";}?>

Verwijderd

Topicstarter
Hmm nope lukt allemaal niet. Dit is echt niet leuk.

  • Grum
  • Registratie: Juni 2001
  • Niet online
evil grin >:)

dan kan je et maar beter NOG slimmer doen en ook meteen GOED doen >:)

jij returned een array met je functie ... dat klopt niet he ? :)
code:
1
2
3
4
5
SELECT username 
FROM table 
WHERE 
    username = '$username' 
AND password = MD5('$password')


code:
1
return mysql_result($theResult, 0, 0);

  • Grum
  • Registratie: Juni 2001
  • Niet online
Piete: md5 is bij 2 dezelfde strings ALTIJD hetzelfde dus je doet IETS fout .. misschien een enter of een spatie aan het einde ofzo.

Verwijderd

Topicstarter
Heb je het tegen mij dat ik iets met een array niet goed doe?
Nee echt nie ik heb nu als wachtwoord en gebruikersnaam. 123 en ik krijg dit:
d41d8cd98f00b204e9800998ecf8427e <-- ingevuld
202cb962ac59075b964b07152d234b70 <-- uit de DB

Verwijderd

jij returned een array met je functie ... dat klopt niet
klopt niet? werkt wel hoor! al jaren... :)

Verwijderd

Op woensdag 13 maart 2002 15:31 schreef Piete het volgende:
Heb je het tegen mij dat ik iets met een array niet goed doe?
Nee echt nie ik heb nu als wachtwoord en gebruikersnaam. 123 en ik krijg dit:
d41d8cd98f00b204e9800998ecf8427e <-- ingevuld
202cb962ac59075b964b07152d234b70 <-- uit de DB
Klopt die uit de DB wel???

Volgens mij iig niet :P

Verwijderd

het zal wel helemaal niet uit maken maar wat voor type veld is password?

  • Grum
  • Registratie: Juni 2001
  • Niet online
in php:
code:
1
2
3
4
$ php -q
<?=md5('123');?>

202cb962ac59075b964b07152d234b70

in mysql:
code:
1
2
3
4
5
6
mysql> select MD5('123');
+----------------------------------+
| MD5('123')                 |
+----------------------------------+
| 202cb962ac59075b964b07152d234b70 |
+----------------------------------+

op de shell:
code:
1
2
$ echo -n 123 | md5sum
202cb962ac59075b964b07152d234b70

conclusie .. jij doet wat fout

Verwijderd

hmm, dus die uit de DB klopt en die ermee wordt vergeleken niet...

  • Grum
  • Registratie: Juni 2001
  • Niet online
zellufs: klopt niet? werkt wel hoor! al jaren... :)

jah maar je doet $user = functie_die_een_array_returned();

DAT klopt niet

zellufs: hmm, dus die uit de DB klopt en die ermee wordt vergeleken niet...

je bent echt geniaaal :+

Verwijderd

Topicstarter
PHP:
1
<?function password($username, $password) { // <---    verbind();    $pass_uit_database = "";    $query = "SELECT password FROM leden WHERE username = '$username'"; // <---    $resultaat = mysql_query($query) or die(mysql_error());    if ($row = mysql_fetch_object($resultaat))    {        if(md5($password)== $row->password) {            return TRUE;        }        else {            echo "De combinatie tussen je paswoord en je gebruikersnaam is niet juist.";            echo "<br>".md5($password)."<br>";            echo "$row->password";            return FALSE;        }    }    else {        echo "Je gebruikersnaam is ongelding";        return FALSE;    }}?>

Dan zou er hier een fout in zitten maar wat?

Verwijderd

Op woensdag 13 maart 2002 15:47 schreef Grum het volgende:
zellufs: klopt niet? werkt wel hoor! al jaren... :)

jah maar je doet $user = functie_die_een_array_returned();

DAT klopt niet
Klopt niet? Ik blijf erbij, het WERKT geloof me maar... *D

  • Grum
  • Registratie: Juni 2001
  • Niet online
geef es de output van als je password 123 is van:

var_dump($password);

Verwijderd

Topicstarter
Ik deed dus even echo "$password"; En hij liet dus gewoon niks zien. Maar als je inlogt ga je eerst naar de volgende pagina:
PHP:
1
<?session_start();$controle == FALSE;include ("functie.php3");$controle = password($username, $passgecodeerd);if ($controle == TRUE) { // pagina weer geven bij TRUEecho "je bent goed in gelogt $username";echo "<a href=\"logout.php3\">Uitloggen</a>";}?>

  • Grum
  • Registratie: Juni 2001
  • Niet online
ja dus ?

Verwijderd

weten we iig dat dat het probleem is want

md5('') returnt : d41d8cd98f00b204e9800998ecf8427e

Verwijderd

Topicstarter
Dit is wel kut. Het moelijkste gedeelte van me leden systeempje. Als dit werkt zopu het mooi zijn maar het wil nu niet echt bepaald mee werken.

Verwijderd

En waar is het form waarmee je die waarden instuurd?

Verwijderd

Topicstarter
PHP:
1
<?$verlooptijd = 60*60*24*100; // dit is een periode van  honderd dagensession_set_cookie_params($verlooptijd);session_start();if ($HTTP_POST_VARS["username"] &amp;&amp; $HTTP_POST_VARS["password"]) {$passgecodeerd = md5($HTTP_POST_VARS["password"]);$username = $HTTP_POST_VARS["username"];    session_register("username");    session_register("$passgecodeerd");    header("Location: ingelogd.php3");    exit;}else {?><form method="post" action="login.php3">    Genruikersnaam:<input type="Text" name="username"><br>    Paswoord:<input type="Password" name="password"><br>    <input type="submit" name="submit" value="Login"></form><?}?>

Verwijderd

dus je codeert het password dubbel?

Verwijderd

en bij die session_register van het password moet die $ weg

Verwijderd

Topicstarter
Ok de fout hebben we dus bijna. Maar welke moet ik weg halen bij het inloggen of die in de functie.

Verwijderd

het lijkt me veiliger om het gecodeerde password in die session te zetten, en dus die in die functie weghalen, en nog steeds die $ bij die session_register

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 12-09 22:29

PowerSp00n

There is no spoon

Zal niks uitmaken denk ik. Makkelijker is natuurlijk bij het inloggen weg halen. Dan hoef je dat niet steeds te doen voordat je die functie gaat gebruiken.

Verwijderd

waarschijnlijk gebruiktie die inlogfunctie alleen maar om in te loggen... dus dat maakt dan verder ook weinig verschil... :)

Verwijderd

Topicstarter
PHP:
1
<?$verlooptijd = 60*60*24*100; // dit is een periode van  honderd dagensession_set_cookie_params($verlooptijd);session_start();if ($HTTP_POST_VARS["username"] &amp;&amp; $HTTP_POST_VARS["password"]) {    session_register("username");    session_register("password");    header("Location: ingelogd.php3");    exit;}else {?><form method="post" action="login.php3">    Genruikersnaam:<input type="Text" name="username"><br>    Paswoord:<input type="Password" name="password"><br>    <input type="submit" name="submit" value="Login"></form><?}?>

Deze is nu zo het inloggen. Klopt dat of niet.

Verwijderd

ik zou zeggen van wel ja...

Verwijderd

Topicstarter
Ok dan:
PHP:
1
<?function password($username, $password) { // <---    verbind();    $pass_uit_database = "";    $query = "SELECT password FROM leden WHERE username = '$username'"; // <---    $resultaat = mysql_query($query) or die(mysql_error());    if ($row = mysql_fetch_object($resultaat))    {        if(md5($password)== $row->password) {            return TRUE;        }        else {            echo "De combinatie tussen je paswoord en je gebruikersnaam is niet juist.";            echo "<br>".md5($password)."<br>";            echo "$row->password";            return FALSE;        }    }    else {        echo "Je gebruikersnaam is ongelding";        return FALSE;    }}?>

Moet hier dan nog iets gewijzigd worden.

Verwijderd

ast goed is niet, maar ik zou zeggen, probeer het gewoon :)

  • PowerSp00n
  • Registratie: Februari 2002
  • Laatst online: 12-09 22:29

PowerSp00n

There is no spoon

Op woensdag 13 maart 2002 16:14 schreef zellufs het volgende:
het lijkt me veiliger om het gecodeerde password in die session te zetten, en dus die in die functie weghalen
Jij gelijk, had ik even niet aan gedacht :).

Verwijderd

Topicstarter
Nope nog niet:
inloggen:
PHP:
1
<?$verlooptijd = 60*60*24*100; // dit is een periode van  honderd dagensession_set_cookie_params($verlooptijd);session_start();if ($HTTP_POST_VARS["username"] &amp;&amp; $HTTP_POST_VARS["password"]) {$passgecodeerd = md5($HTTP_POST_VARS["password"]);$username = $HTTP_POST_VARS["username"];    session_register("username");    session_register("passgecodeerd");    header("Location: ingelogd.php3");    exit;}else {?><form method="post" action="login.php3">    Genruikersnaam:<input type="Text" name="username"><br>    Paswoord:<input type="Password" name="password"><br>    <input type="submit" name="submit" value="Login"></form><?}?>

En dan als je op submit drukt:
PHP:
1
<?session_start();$controle == FALSE;include ("functie.php3");$controle = password($username, $passgecodeerd);if ($controle == TRUE) { // pagina weer geven bij TRUEecho "je bent goed in gelogt $username";echo "<a href=\"logout.php3\">Uitloggen</a>";}?>

En dan even de functie checken:
PHP:
1
<?function password($username, $password) { // <---    verbind();    $pass_uit_database = "";    $query = "SELECT password FROM leden WHERE username = '$username'"; // <---    $resultaat = mysql_query($query) or die(mysql_error());    if ($row = mysql_fetch_object($resultaat))    {        if($pasgecodeerd == $row->password) {            return TRUE;        }        else {            echo "De combinatie tussen je paswoord en je gebruikersnaam is niet juist.";            echo "<br>".md5($password)."<br>";            echo "$row->password";            return FALSE;        }    }    else {        echo "Je gebruikersnaam is ongelding";        return FALSE;    }}?>

Dat is het wat ik heb.

Verwijderd

volgens mij krijg je op deze manier NOOIT waardes in je session, probeer die eens te echoën op die tweede pagina, kijken wattie dan zegt...

anders moet je na het inloggen eerst iets doen als:

$passgecodeerd = $HTTP_POST_VARS["passgecodeerd"];

Verwijderd

Topicstarter
Hmm nooit gedacht dat ze van die scripts neer zetten op phpfreakz die totaal niet werken. Ik zocht iets om me paswoord te coderen maar het werkt dus voor geen ene meter. Ik moet zo werken dus ik kijk zo weer even verder.

Verwijderd

gebruik zoiets eens als login.php? hoef je ook niet dat password mee te slepen...
PHP:
1
<?$verlooptijd = 60*60*24*100;  session_set_cookie_params($verlooptijd);session_start();session_register("username");    session_register("password"); //hier verbinding maken me databasefunction verify_login($username, $password) {        $res = mysql_query("SELECT username FROM table WHERE username = '$username' AND password = '" . md5($password) . "'");        return mysql_fetch_row($res);}if ($HTTP_POST_VARS["username"] &amp;&amp; $HTTP_POST_VARS["password"]) {    if($user = verify_login($HTTP_POST_VARS["username"], $$HTTP_POST_VARS["password"])){        $username = $HTTP_POST_VARS["username"];        $password = $HTTP_POST_VARS["password"];        header("Location: ingelogd.php3");        exit;    }else{        echo "niet ingelogd...";    }}else {?><form method="post" action="<?=$PHP_SELF?>">        Gebruikersnaam:<input type="Text" name="username"><br>        Password:<input type="Password" name="password"><br>        <input type="submit" name="submit" value="Login"></form><?}?>

  • rvrbtcpt
  • Registratie: November 2000
  • Laatst online: 09:34
Je moet wat debug informatie laten wegschrijven tussen je code door. Je kunt een routine schrijven die een log file vult. Je kunt dan je waardes die je in je code hebt steeds laten afdrukken zonder dat dit in je HTML moet gebeuren.

En waarom lees je de gegeven uit op deze manier:

$HTTP_POST_VARS["username"] ?

Als je een form post naar een php script dan heb je de variabelen toch gewoon als $username beschikbaar.
Kijk eens of het daar niet aan ligt. Ik neem aan dat het allemaal dezelfde functionaliteit heeft maar als je een rare werking krijgt moet je rare dingen proberen :)

En ik zou in de session een anonymous flag zetten. Gewoon standaard op 0 en op 1 als iemand correct inlogd. Zo hoef je geen lange strings in je sessie te bewaren.

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

we zijn geen gathering of debuggers
er zijn zat tips gegeven in dit topic

Doet iets met Cloud (MS/IBM)

Pagina: 1

Dit topic is gesloten.