Controleer of password klopt
Ik gebruik momenteel onderstaande regel in mijn inlogformulier om te controleren of de goede gegevens zijn ingevuld:
Code (php)
1
<?php if(mysql_num_rows(mysql_query("SELECT id,klantnr,hash FROM klanten WHERE klantnr='" . $_POST["klantnummer"] ."' AND wachtwoord='" . $_POST["wachtwoord"] ."' AND domein='" . $_POST["domein"] ."'"))==1){ ?>
Ik geef alle klanten een sterk wachtwoord bestaand uit kleine letters, hoofdletters en cijfers. Alleen helaas controleert hij alleen de letters en cijfers en niet of het ook daadwerkelijk om hoofd en kleine letters gaat. Bijvoorbeeld als iemand zijn password DfjgfK19 is en hij voert in dfjgfk19 dan werkt dat ook.
Wie weet hoe ik dit kan controleren?
-mysql injectie mogelijk
-foutafhandeling ontbreekt
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
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
<?php
$sql = "SELECT id, klantnr, hash FROM klanten
WHERE
klantnr='".mysql_real_escape_string($_POST["klantnummer"])."'
AND
wachtwoord='".mysql_real_escape_string($_POST["wachtwoord"])."'
AND
domein='".mysql_real_escape_string($_POST["domein"])."'
";
if(!$res = mysql_query($sql))
{
##een error
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Geen resultaten gevonden';
}
else
{
##er zijn er meer dan 1 gegevens omzetten
$row = mysql_fetch_assoc($res);
###gegevens ophalen hier
}
?>
$sql = "SELECT id, klantnr, hash FROM klanten
WHERE
klantnr='".mysql_real_escape_string($_POST["klantnummer"])."'
AND
wachtwoord='".mysql_real_escape_string($_POST["wachtwoord"])."'
AND
domein='".mysql_real_escape_string($_POST["domein"])."'
";
if(!$res = mysql_query($sql))
{
##een error
trigger_error(mysql_error().'<br />In query: '.$sql);
}
elseif(mysql_num_rows($res) == 0)
{
echo 'Geen resultaten gevonden';
}
else
{
##er zijn er meer dan 1 gegevens omzetten
$row = mysql_fetch_assoc($res);
###gegevens ophalen hier
}
?>
Gewijzigd op 18/04/2012 17:16:43 door php knipper
Encryptie maakt wél verschil tussen hoofd- en kleine letters;
Phphulp - 80bb3265ff1b003463602fb45d9c78a8
phphulp - a389f787e36c6d61b9c518953a150fa2
alleen de eerste letter is anders en de hash (md5 in dit geval) is compleet anders.
vergeet niet dat in de database ook al md5 staat ( je kan het wachtwoord van je gebruikers niet meer zien )
Dus, zoek een encryptie methode om je wachtwoorden in de database te beveiligen, dit lost ook direct het probleem van de hoofd en kleine letters op.
Startpunt voor je zoektocht: http://dev.mysql.com/doc/refman//5.5/en/encryption-functions.html
het deel code dat ik van dat van u gemaakt heb is niet moeilijk en kan zo opnieuw worden gebruikt. pas altijd op als je werkt met een database voor pottenkijkers ;)
@php knipper, Zorg er dan ook voor dat als er een SQL error is je niet de hele query output en ook niet de error. En dit dus alleen te doen bij het debuggen van je website. Anders weten de 'pottenkijkers' sneller hoe je database eruit ziet.
je moet de functie wel zelf vullen trigger_error() dan kan je dat aan en uit zetten
Maar ik ben er mee bezig en heb alleen nog een vraag over de code van php knipper die ik uiteraard wil gaan gebruiken. Je gebruikt de variabele $res alleen waar wordt deze ingevuld? Zoals ik het zie is er nergens een waarde ingevoerd.
Wat betekent dan die $res?