Ledenscript
Ik ben bezig met het maken van een ledenscript (voor eigen gebruik). Ik ben bijna klaar, maar de gegevens staan nu nog onbeveiligd in de database.
Ik heb via Google een pagina gelezen over md5, en dit uitgeprobeerd, maar dit werkte niet. Ik denk dat ik iets verkeerd doe.
Inloggen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if ($_GET['pagina'] == "aanmelden" and $_GET['id'] == "aanmelden") {
$gebruikersnaam = $_POST['gebruikersnaam'];
$gebruikersnaam = stripslashes($gebruikersnaam);
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$wachtwoord = $_POST['wachtwoord'];
$wachtwoord = stripslashes($wachtwoord);
$wachtwoord = mysql_real_escape_string($wachtwoord);
$veiligwachtwoord = md5($wachtwoord); // Met md5 uit de database halen
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".$veiligwachtwoord."'";
$query2 = mysql_query($query);
$query3 = mysql_num_rows($query2);
if ($query3 == 1) {
session_register("gebruikersnaam");
session_register("wachtwoord");
header("Location: welkom.php");
}
$gebruikersnaam = $_POST['gebruikersnaam'];
$gebruikersnaam = stripslashes($gebruikersnaam);
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$wachtwoord = $_POST['wachtwoord'];
$wachtwoord = stripslashes($wachtwoord);
$wachtwoord = mysql_real_escape_string($wachtwoord);
$veiligwachtwoord = md5($wachtwoord); // Met md5 uit de database halen
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".$veiligwachtwoord."'";
$query2 = mysql_query($query);
$query3 = mysql_num_rows($query2);
if ($query3 == 1) {
session_register("gebruikersnaam");
session_register("wachtwoord");
header("Location: welkom.php");
}
Registreren:
Code (php)
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
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
} elseif ($_GET['pagina'] == "inschrijven") {
if ($_GET['id'] == "inschrijven") {
$gebruikersnaam = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
$wachtwoord2 = $_POST['wachtwoord2'];
$emailadres = $_POST['emailadres'];
$voornaam = $_POST['voornaam'];
$achternaam = "";
$rang = 1;
$saldo = 10;
if (!empty($voornaam) and !empty($gebruikersnaam) and !empty($wachtwoord) and !empty($wachtwoord2) and $wachtwoord2 == $wachtwoord) {
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."'";
$query2 = mysql_query($query) or die ("We kunnen geen verbinding maken.");
$query3 = mysql_num_rows($query2);
if ($query3 == 0) {
ob_start();
header("Location: http://www..eu/index.php?pagina=inschrijven&id=inschrijven&id=ingeschreven");
ob_flush();
$veiligwachtwoord = md5($wachtwoord); // Met md5 in de database zetten
$inschrijven = "INSERT INTO gebruikers (gebruikersnaam, wachtwoord, emailadres, voornaam, rang, saldo) VALUES ('".$gebruikersnaam."', '".$veiligwachtwoord."', '".$emailadres."', '".$voornaam."', '".$rang."', '".$saldo."')";
mail("".$emailadres."", "Welkom bij ", "Hallo ".$voornaam.",\n\nWelkom bij ! Uw gegevens zijn:\n\nGebruikersnaam: ".$gebruikersnaam."\nWachtwoord: ".$wachtwoord."\n\nVeel plezier!\n\n\n\n\nwww..eu", "From: ");
mysql_query($inschrijven) or die ("We kunnen geen verbinding maken.");
} else {
ob_start();
header("Location: http://www..eu/id/index.php?pagina=inschrijven&id=inschrijven&id=probleem");
ob_flush();
}
}
}
}
if ($_GET['id'] == "inschrijven") {
$gebruikersnaam = $_POST['gebruikersnaam'];
$wachtwoord = $_POST['wachtwoord'];
$wachtwoord2 = $_POST['wachtwoord2'];
$emailadres = $_POST['emailadres'];
$voornaam = $_POST['voornaam'];
$achternaam = "";
$rang = 1;
$saldo = 10;
if (!empty($voornaam) and !empty($gebruikersnaam) and !empty($wachtwoord) and !empty($wachtwoord2) and $wachtwoord2 == $wachtwoord) {
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."'";
$query2 = mysql_query($query) or die ("We kunnen geen verbinding maken.");
$query3 = mysql_num_rows($query2);
if ($query3 == 0) {
ob_start();
header("Location: http://www..eu/index.php?pagina=inschrijven&id=inschrijven&id=ingeschreven");
ob_flush();
$veiligwachtwoord = md5($wachtwoord); // Met md5 in de database zetten
$inschrijven = "INSERT INTO gebruikers (gebruikersnaam, wachtwoord, emailadres, voornaam, rang, saldo) VALUES ('".$gebruikersnaam."', '".$veiligwachtwoord."', '".$emailadres."', '".$voornaam."', '".$rang."', '".$saldo."')";
mail("".$emailadres."", "Welkom bij ", "Hallo ".$voornaam.",\n\nWelkom bij ! Uw gegevens zijn:\n\nGebruikersnaam: ".$gebruikersnaam."\nWachtwoord: ".$wachtwoord."\n\nVeel plezier!\n\n\n\n\nwww..eu", "From: ");
mysql_query($inschrijven) or die ("We kunnen geen verbinding maken.");
} else {
ob_start();
header("Location: http://www..eu/id/index.php?pagina=inschrijven&id=inschrijven&id=probleem");
ob_flush();
}
}
}
}
Weet iemand hoe ik dit op kan lossen?
Gewijzigd op 13/07/2011 14:05:22 door B a s
Wat voor foutmelding krijg je?
Dus ergens moet er wat verkeerd staan waardoor OF de md5 niet juist in de database wordt gezet, OF dat het er niet goed uit wordt gehaald.
Het erin zetten is alleen dit:
En bij het inloggen, het controleren van de wachtwoorden is dit:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$wachtwoord = $_POST['wachtwoord'];
$wachtwoord = stripslashes($wachtwoord);
$wachtwoord = mysql_real_escape_string($wachtwoord);
$veiligwachtwoord = md5($wachtwoord);
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".$veiligwachtwoord."'";
$query2 = mysql_query($query);
$query3 = mysql_num_rows($query2);
$wachtwoord = stripslashes($wachtwoord);
$wachtwoord = mysql_real_escape_string($wachtwoord);
$veiligwachtwoord = md5($wachtwoord);
$query = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".$veiligwachtwoord."'";
$query2 = mysql_query($query);
$query3 = mysql_num_rows($query2);
Dan weet je gelijk waar het fout gaat, want code nalopen kost gewoon meer tijd.
en wat staat er in het DB bij wachtwoord?
Gewijzigd op 27/09/2010 08:30:12 door www JdeRuijterNL
En wat hier aan scripts is geplaatst, is in principe de enige scripting van de verwerking. Dus heel groot is het niet.
Gewijzigd op 27/09/2010 08:30:17 door Mario Onbekend
Maargoed, ik kom met een tip zodat je je fouten makkelijker kan opsporen, wat je ermee doet is natuurlijk weer aan jou.
Notice: Undefined index: id in /home/nieuwni/domains/nieuwnieuws.eu/public_html/nieuwnieuwsid/index.php on line 140
Notice: Undefined index: id in /home/nieuwni/domains/nieuwnieuws.eu/public_html/nieuwnieuwsid/index.php on line 142
Deze 'id-s' worden gebruikt voor de verwerking van het script. Wanneer de gebruiker op de verzendknop drukt, wordt het script doorgestuurd naar bijvoorbeeld &id=aanmelden, en wordt, zoals je in het script al ziet, door middel van een $_GET['id'] == "aanmelden" de actie uitgevoerd.
Daarnaast krijg ik:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/nieuwni/domains/nieuwnieuws.eu/public_html/nieuwnieuwsid/index.php:24) in /home/nieuwni/domains/nieuwnieuws.eu/public_html/nieuwnieuwsid/index.php on line 54
Maar deze error kreeg ik niet toen ik jouw scriptje er niet in had staan. En registreren deed hij gewoon, en inloggen ook. Alleen toen ik de 2 md5-scriptjes erin had gezet deed hij het niet meer.
Het gaat namelijk fout met het vergelijken van de ingevoerde md5(wachtwoord) en het wachtwoord in het database, die moet ook MD5 wezen!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
if ($_GET['pagina'] == "aanmelden" and $_GET['id'] == "aanmelden") {
$gebruikersnaam = mysql_real_escape_string(stripslashes($_POST['gebruikersnaam']));
$wachtwoord = stripslashes(mysql_real_escape_string($_POST['wachtwoord'])));
$sql = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".md5($wachtwoord)."'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
echo 'Gelukt, Je bent ingelogd.<br>';
}else{
$row = mysql_fletch_array($query);
echo 'Je bent nog niet ingelogd.<br>wachtwoord: '.$wachtwoord.' - Wachtwoord Database: '.$row['wachtwoord'].'<br>';
}
}
$gebruikersnaam = mysql_real_escape_string(stripslashes($_POST['gebruikersnaam']));
$wachtwoord = stripslashes(mysql_real_escape_string($_POST['wachtwoord'])));
$sql = "SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruikersnaam."' AND wachtwoord='".md5($wachtwoord)."'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
echo 'Gelukt, Je bent ingelogd.<br>';
}else{
$row = mysql_fletch_array($query);
echo 'Je bent nog niet ingelogd.<br>wachtwoord: '.$wachtwoord.' - Wachtwoord Database: '.$row['wachtwoord'].'<br>';
}
}
Zelf even na kijken of ik het goed gedaan heb:)
Gewijzigd op 27/09/2010 09:44:12 door Mitchel V
Gewijzigd op 27/09/2010 09:42:35 door www JdeRuijterNL
Bedankt, ik zal het proberen!
@OverdatumpuntNL:
Het invoeren van de md5 is geen probleem, dat is simpel te doen met md5($wachtwoord). Het is precies hoe jij het zegt, de vergelijking gaat niet goed.
UPDATE: Dat betekent dus dat het wachtwoord al in md5 in de database staat.
Toevoeging op 27/09/2010 09:51:44:
@Mitchel V:
Hij stuurt mij net weer naar die } else { toe, wat betekent: het script snapt het dan nog niet :P
Toevoeging op 27/09/2010 10:01:03:
Wow dit is echt heel grappig! Ik kwam per ongeluk bij mijn vorige 'hulpvraag' terecht, en daar had iemand geplaatst dat ik de structuur van de database moest controleren. (Ik dacht dat dat dit topic was, en dat iemand het op deze vraag had geantwoordt!)
Dus ik kijken bij de databasestructuur, en ik zie dat ik bij het veld 'wachtwoord' nog een varchar(20) had staan. Nou lijkt mij dit niet echt logisch voor een md5, dus ik heb het aangepast naar varchar(50).
Het verkeerde bericht in het verkeerde topic, heeft mij dus de GOEDE OPLOSSING GEBRACHT! Geweldig!
Allemaal bedankt voor jullie reacties!
UPDATE: Ik heb gelijk van de gelegenheid gebruik gemaakt, en het wachtwoord eerst 2x 'gemd5-t' en daarna nog een SHA1 over heen gegooid!
Gewijzigd op 27/09/2010 10:08:17 door Mario Onbekend
Als je mijn voorbeeld had gebruikt had je ook gezien dat de pass in de database korter is dan de md5 wachtwoord die wordt ingevoerd.
Gewijzigd op 27/09/2010 10:56:57 door Mitchel V