wachtwoord beveiligen!
Ik heb een vraag.
Ik ben bezig met een inlogsysteem.
Mijn vraag is:
Ik gebruik o.a md5 sha1 + salt en base64_encode om een wachtwoord te beveiligen.
Is dit veilig of kan het nog beter?
dit is mijn code:
Ik ben bezig met een inlogsysteem.
Mijn vraag is:
Ik gebruik o.a md5 sha1 + salt en base64_encode om een wachtwoord te beveiligen.
Is dit veilig of kan het nog beter?
dit is mijn code:
Code (php)
Gewijzigd op 07/03/2013 22:54:01 door Hoi geen
bij mijn weten is het slecht, je gaat hierdoor meer mogelijkheden krijgen door het gecodeerde te coderen.
Meschien is het een idee om te tellen om hoeveel letters het gaat en daarop een aangepaste codeer techniek te pakken.
tussen 0 en 5 = md5
groter = sha1
en het wachtwoord sla je dan op als bevoordeeld $aantal.$gecodeertwachtwoord
voorbeeld ik
ik = 2 letters dus md5
wachtwoord in database = 2.D35YHFEF345T6GHRQZGZGERRH ( natuurlijk geen echt codering )
Meschien is het een idee om te tellen om hoeveel letters het gaat en daarop een aangepaste codeer techniek te pakken.
tussen 0 en 5 = md5
groter = sha1
en het wachtwoord sla je dan op als bevoordeeld $aantal.$gecodeertwachtwoord
voorbeeld ik
ik = 2 letters dus md5
wachtwoord in database = 2.D35YHFEF345T6GHRQZGZGERRH ( natuurlijk geen echt codering )
oke,
Ik dacht eigenlijk zo.
Als ik de code gebruik die hier boven beschreven staat en ik voer in als wachtwoord: wachtwoord1990.
De uitkomst zoals het in de database komt is dan: 4f71fccac43c73545ddd9cd772f37598.
Als je niet wat ik heb gebruikt om van wachtwoord1990 4f71fccac43c73545ddd9cd772f37598 temaken.
Dan lijkt me dat veiliger als alleen md5. om dat je niet weet hoe ik aan de uit komst kom.
Of is dit een verkeerde beredeneerin?
Ik dacht eigenlijk zo.
Als ik de code gebruik die hier boven beschreven staat en ik voer in als wachtwoord: wachtwoord1990.
De uitkomst zoals het in de database komt is dan: 4f71fccac43c73545ddd9cd772f37598.
Als je niet wat ik heb gebruikt om van wachtwoord1990 4f71fccac43c73545ddd9cd772f37598 temaken.
Dan lijkt me dat veiliger als alleen md5. om dat je niet weet hoe ik aan de uit komst kom.
Of is dit een verkeerde beredeneerin?
md5 kun je er beter uitslopen. sha1 met je eigen salt is genoeg. Waarschijnlijk stel je jezelf de vraag hoe je beveiliging beter kan maar vergeet je de voordeur van een goed slot te voorzien. Wat ik bedoel te zeggen is dat de zwakste schakel de sterkte van de beveiliging bepaalt. Bijvoorbeeld: Als je jouw salt in een php bestand zet in een goed geconfigureerde webserver dan zal die vanuit de browser niet te achterhalen zijn. Echter wanneer je een zwak wachtwoord gebruikt voor jouw FTP server en een hacker kan daar op inbreken dan is jouw beveiliging - hoe goed je die ook gemaakt hebt - in één klap helemaal waardeloos. Immers kun je vanuit FTP de inhoud van jouw PHP bestanden gewoon downloaden en lezen. Hetzelfde geldt voor je login van je admin panel.
Oké ik denk dat ik het snap.
Dus alleen de sha1 + salt ( is de salt die ik gebruik niet erg lang? of maakt dit niet uit en zijn bijvoorbeeld 7 leestekensen en letters voldoende.
In iedergeval bebankt voor de duidelijke uitleg!
Dus alleen de sha1 + salt ( is de salt die ik gebruik niet erg lang? of maakt dit niet uit en zijn bijvoorbeeld 7 leestekensen en letters voldoende.
In iedergeval bebankt voor de duidelijke uitleg!
Zelf doe ik het meestal op de volgende manier. De gebruiker heeft een id die ik in combinatie met een salt gebruik als key. Daarna haal ik het door hash_hmac en dan is het wachtwoord beveiligd.
Ook verplicht ik op een zekere manier de gebruikers om een stevig wachtwoord te kiezen met minstens één cijfer en één hoofdletter.
- edit - Verplichtingen v/d gebruiker
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
# Gebruiker als voorbeeld in een array:
$user['id'] = 2;
$user['password'] = 'Kikker123';
# Nu de gegevens door hash hmac halen:
echo hash_hmac('sha512', $user['password'], '@SuperGeheimeCode@'.$user['id'], false);
?>
# Gebruiker als voorbeeld in een array:
$user['id'] = 2;
$user['password'] = 'Kikker123';
# Nu de gegevens door hash hmac halen:
echo hash_hmac('sha512', $user['password'], '@SuperGeheimeCode@'.$user['id'], false);
?>
Ook verplicht ik op een zekere manier de gebruikers om een stevig wachtwoord te kiezen met minstens één cijfer en één hoofdletter.
- edit - Verplichtingen v/d gebruiker
Beter is het om een iets langere salt aan te maken die random gegenereerd zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function getRandomString($length = 32) {
$validCharacters = '0123456789abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ+-*#&@!?$%^&()_={}[]\|/<>';
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result;
}
echo getRandomString();
?>
function getRandomString($length = 32) {
$validCharacters = '0123456789abcdefghijklmnopqrstuxyvwzABCDEFGHIJKLMNOPQRSTUXYVWZ+-*#&@!?$%^&()_={}[]\|/<>';
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
return $result;
}
echo getRandomString();
?>
@Frank: hoe reproduceer je die salt dan weer op het moment dat je het wachtwoord gaat controleren?
@Ozzie, je kan de salt toch in de database opslaan en een extra hash gebruiken die altijd hetzelfde is? Maar goed, dat is een beetje overbodig...:)
@Ozzie: Ozzie dit is een generator voor een willekeurige string. Die string copy-paste je gewoon in je config.php file.
@Marvin: Ik zou de salt niet in de database opslaan. als een hacker in je database is binnengedrongen dan loopt ie tegen gecodeerde wachtwoorden aan en heeft ie gelijk wat ie nodig heeft om ze te decoderen. Gewoon in PHP laten staan.
@Marvin: Ik zou de salt niet in de database opslaan. als een hacker in je database is binnengedrongen dan loopt ie tegen gecodeerde wachtwoorden aan en heeft ie gelijk wat ie nodig heeft om ze te decoderen. Gewoon in PHP laten staan.
@Frank:
Ik begrijp je niet helemaal. Je schrijft 1 code om een salt te maken, en die ene salt sla je op in je config file? Dan kun je die salt toch ook gewoon zelf verzinnen?
Ik begrijp je niet helemaal. Je schrijft 1 code om een salt te maken, en die ene salt sla je op in je config file? Dan kun je die salt toch ook gewoon zelf verzinnen?
dit snap ik inderdaad ook niet helemaal!
Een willekeurige salt ben ik ook wel voor. Maar liever gebruik ik dan de gebruiker id, een stuk van het email adres (eventueel geencrypteerd). Het wachtwoord moet dan ook wel opnieuw opgeslagen worden als de gebruiker zijn gegevens veranderd. Maar dan denk ik wel dat je meer controle hebt over de gegevens. Want als je de key in het config bestand niet goed bewaard dan ben je natuurlijk de pineut. Bij mij is dit ook zo. Daarom sla ik mijn key altijd meermaals beveiligd op.
Zelf gebruik ik hash_hmac met een key dat ik in een config bestand opsla. Meestal genereer ik mijn keys via Wordpress.
Zelf gebruik ik hash_hmac met een key dat ik in een config bestand opsla. Meestal genereer ik mijn keys via Wordpress.




