inloggen met md5

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jorian

jorian

30/06/2007 11:16:00
Quote Anchor link
Hallo allemaal, ik ben bezig met een inlogsysteem voor een website en nou heb ik een stuk uit een tutorial overgenomen, dit stuk staat nu in 'loginpost.php':
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
include("connection.php");
include("header.php");

?>

<H2 ALIGN="CENTER">
Inloggen
</H2>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$ip
=$_SERVER['REMOTE_ADDR'];
if (!isset($_SESSION["gebruiker"])) {
$naam=mysql_real_escape_string($_POST["naam"]);
$wachtwoord=mysql_real_escape_string($_POST["wachtwoord"]);
if ($naam=="" || !isset($naam) ) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Geen naam ingevuld!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;
}

if ($wachtwoord=="" || !isset($wachtwoord) ) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Geen wachtwoord ingevuld!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;
}

$query="SELECT * FROM gebruikers WHERE naam='$naam'";
$uitvoeren=mysql_query($query) or die (mysql_error());
if (mysql_num_rows($uitvoeren)==0) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Die gebruikersnaam bestaat niet!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;
}

$rij=mysql_fetch_assoc($uitvoeren);
if ($wachtwoord!=$rij["wachtwoord"]) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Fout wachtwoord!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;
}

$_SESSION["gebruiker"]=$naam;
echo '<p ALIGN="CENTER"><FONT COLOR="GREEN"><B>Je bent nu ingelogd!</B></FONT></P>';
mysql_query("UPDATE gebruikers SET laatstip='$ip', laatsttijd=NOW()") or die (mysql_error());
?>

<BR />
<p ALIGN="CENTER"><A HREF="index.php">Home</A></P>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
}
else {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Je bent al ingelogd!</B></FONT><BR /><A HREF="index.php">Home</A></P>';
include("footer.php");
die;
}

include("footer.php");
?>


Nou heb ik bij het registreren gezorgt dat het wachtwoord gecodeerd word met md5, maar als ik dan wil inloggen, dan kan ik alleen inloggen met dat gecodeerde wachtwoord. Maar waar in die bovenstaande code, moet ik wat veranderen, en wat moet ik daar dan veranderen, zodat ik wel gewoon kan inloggen met het normale wachtwoord waarmee je hebt geregistreerd en niet met het gecodeerde wachtwoord?
Alvast Bedankt!

Groetjes Jorian
 
PHP hulp

PHP hulp

23/12/2024 13:14:03
 
Frank -

Frank -

30/06/2007 11:24:00
Quote Anchor link
Vraagje: Waarom vergelijk je het wachtwoord (nadat je een md5-hash hebt aangemaakt) niet in de database? Beetje zinloos om eerst het wachtwoord op te halen en dan in PHP de vergelijking te gaan doen. Dit had je al in de query kunnen opgeven:
WHERE wachtwoord = 'blablabla'

Offtopic: GA NOOIT ROEPEN DAT HET WACHTWOORD OF DE USER NIET GOED IS!!! Hiermee maak je het hackers wel héél erg gemakkelijk...
 
Jorian

jorian

30/06/2007 11:27:00
Quote Anchor link
Maar in welke query moet ik dat dan precies zetten, waar precies in die code, wat moet ik weg halen.. want ik ben nog niet egt gevorderd met PHP..
Over dat offtopic, ik he nog geen site ofzo met dat loginsysteem erin dus niemand kan nog een account aan maken alleen ik zelf op mijn pc..
Gewijzigd op 01/01/1970 01:00:00 door jorian
 
Frank -

Frank -

30/06/2007 11:33:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
  *
FROM
  gebruikers
WHERE
  naam='$naam'
AND
  wachtwoord = MD5('$wachtwoord')

Even een voorbeeldje dat je zelf in jouw code mag gaan inpassen. Hier wordt de md5-functie van MySQL gebruikt, je kunt uiteraard ook de md5-functie van php gebruiken. Gebruik die op het moment dat je de variabele $wachtwoord aanmaakt, wel zo eenvoudig en zelfs nog een fractie veiliger.

De 'functie' die() die jij nogal veel gebruikt, hoort niet in een goed stuk php te staan. Beetje erg onvriendelijk voor je bezoekers, er gaat iets fout (jouw fout!) en jij roept dan: STERF!!!

In het vervolg gewoon een fraaie foutafhandeling maken, maar dat kan later ook nog wel. Het is maar dat je het weet, kun je er later rekening mee houden.
 
Jorian

jorian

30/06/2007 11:39:00
Quote Anchor link
ok, maar als ik dat wat jij zei veranderd, dan kent ie de username niet eens meer... :S
 
Frank -

Frank -

30/06/2007 11:43:00
Quote Anchor link
jorian schreef op 30.06.2007 11:39:
ok, maar als ik dat wat jij zei veranderd, dan kent ie de username niet eens meer... :S
Ik zeg niet dat jij moet stoppen met nadenken!

Je kunt in 1 query meerdere controles in 1x doen. Wanneer een record aan al deze voorwaarden voldoet, zul je dit record als result-set retour krijgen. Wanneer dus het user-id en het wachtwoord correct zijn, dan krijg je een resultaat en anders niet. In dat laatste geval is de user dus niet ingelogd: 'user-id niet gevonden of wachtwoord niet correct. Probeer het nogmaals.'. Lijkt mij een fraaie en vooral nietszeggende foutmelding. Dat vinden hackers niet zo leuk, maar dat is dan niet anders.
 
Jorian

jorian

30/06/2007 11:44:00
Quote Anchor link
ik heb het al opgelost, ik heb dit:
$rij=mysql_fetch_assoc($uitvoeren);
if ($wachtwoord!=$rij["wachtwoord"]) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Fout wachtwoord!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;
}

veranderd in:
$query2="SELECT * FROM gebruikers WHERE wachtwoord= MD5('$wachtwoord')";
$uitvoeren2=mysql_query($query2) or die (mysql_error());
if (mysql_num_rows($uitvoeren2)==0) {
echo '<p ALIGN="CENTER"><FONT COLOR="RED"><B>Fout wachtwoord!</B></FONT><BR /><A HREF="login.php">Opnieuw</A></P>';
include("footer.php");
die;

En nou doet hij het!
 
Frank -

Frank -

30/06/2007 11:49:00
Quote Anchor link
En nu voer je dus weer 2 queries uit terwijl je slechts 1 query nodig hebt. De helft van jouw code kan zo richting prullenbak!

Zie mijn reactie van 11:33 voor 1 query met 2 vergelijkingen.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
 
Jorian

jorian

30/06/2007 11:52:00
Quote Anchor link
ja dat snap ik wel, maar dat werkte niet.. maar wat mot ik dan nog meer weg halen ? en wat moet ik nog meer veranderen ?
want dit stukje: if (mysql_num_rows($uitvoeren)==0) {
snap ik niet dus ik weet niet wat ik dan daar moet veranderen..
Gewijzigd op 01/01/1970 01:00:00 door jorian
 
Frank -

Frank -

30/06/2007 11:57:00
Quote Anchor link
jorian schreef op 30.06.2007 11:52:
ja dat snap ik wel, maar dat werkte niet.. maar wat mot ik dan nog meer weg halen ? en wat moet ik nog meer veranderen ?
want dit stukje: if (mysql_num_rows($uitvoeren)==0) {
snap ik niet dus ik weet niet wat ik dan daar moet veranderen..
'werkte niet' is een foutmelding waar niemand wat mee kan. Leg eens uit wat er precies gebeurd, echo de query eens, voer de query eens direct in PHPmyAdmin in uit, etc. etc. etc. Ga dus debuggen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
if (mysql_num_rows($uitvoeren)==0) {
?>

is volgens mij fout, $uitvoeren hoort daar bij mijn weten niet te staan. Sla de handleiding er eens op na, daar word je een stuk wijzer van.

De vergelijking gebruik je overigens om te kijken of er 0 resultaten zijn opgehaald. In dat geval zijn er dus geen gegevens gevonden en kan er niet worden ingelogd.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.