login  Naam:   Wachtwoord: 
Registreer je!
 Tutorials

Tutorials > PHP


Gegevens:
Geschreven door:
marten
Moeilijkheidsgraad:
Normaal
Hits:
5699
Punten:
Aantal punten:
 
Aantal stemmen:
0
Stem:
Niet ingelogd
Nota's:
 Lees de nota's (6)
 


Tutorial:

Wachtwoorden opslaan

Freelance opdrachten, en nu?

Inhoudsopgave


Inleiding


Het opslaan van wachtwoorden is vaak een punt waar veel programmeurs een verkeerde keuze maken. In deze korte tutorial, behorende bij een reeks blogs over veiligheid, wil ik daarop dieper ingaan.
pijl top

Hoe het niet moet

In de blog Waarom zijn MD5 wachtwoorden slecht? wordt uigelegd waarom het opslaan als MD5 slecht is.
pijl top

Hoe het wel moet

Het opslaan van wachtwoorden kan natuurlijk op verschillende manieren. Crypting is misschien wel het beste middel hier tegen. Er zijn verschillende crypting methodes. Aangeraden is om hier gebruik te maken van een zogenaamde salt. Een salt is een string welke gebruikt wordt bij het decrypten van een wachtwoord. Wanneer een gebruiker bijvoorbeeld inlogt wordt er een combinatie van het wachtwoord en de salt gemaakt. Wanneer deze overeen komt is het wachtwoord correct. Kijk bijvoorbeeld eens naar onderstaand script: <?php
$username 
'Admin';
$password 'gf45_gdf#4hg';

// Create a 256 bit (64 characters) long random salt
// Let's add 'something random' and the username
// to the salt as well for added security
$salt hash('sha256'uniqid(mt_rand(), true) . 'something random' strtolower($username));

// Prefix the password with the salt
$hash $salt $password;

// Hash the salted password a bunch of times
for ( $i 0$i 100000$i ++ ) {
  
$hash hash('sha256'$hash);
}

// Prefix the hash with the salt so we can find it back later
$hash $salt $hash;

// Value:
// e31f453ab964ec17e1e68faacbb64f05bccceb179858b4c482c1b182ff1e440e
// f1e10feb5b86c6d367e4eb8f90f2cde5648a7db3df8526878f20a77eed00c703
?>
Code from http://alias.io/

Dit script maakt gebruik van crypting in combinatie met een salt. Omdat je weet dat de eerste 64 karakters de salt zijn kan je vervolgens achterhalen wat het wachtwoord zou moeten zijn:

<?php
$username 
'Admin';
$password 'gf45_gdf#4hg';

$sql '
  SELECT
    `hash`
  FROM `users`
    WHERE
      `username` = "' 
mysql_real_escape_string($username) . '"
  LIMIT 1
  ;'
;

$r mysql_fetch_assoc(mysql_query($sql));

// The first 64 characters of the hash is the salt
$salt substr($r['hash'], 064);

$hash $salt $password;

// Hash the password as we did before
for ( $i 0$i 100000$i ++ ) {
  
$hash hash('sha256'$hash);
}

$hash $salt $hash;

if ( 
$hash == $r['hash'] ) {
  
// Ok!
}
?>
Code from http://alias.io/

pijl top

Slot

Natuurlijk zijn er nog andere tips om zoveel veilig mogelijk te werken. Zorg er bijvoorbeeld voor dat er een logging aanwezig is. Kijk hoevaak iemand probeert in te loggen. En belangrijkste: beperk dit!.Zorg er ook voor dat sterke wachtwoorden verplicht zijn. Verwacht een bepaald aantal karakters zoals vreemde tekens en een cijfer. Mocht je nog vragen hebben na deze korte tutorial kan je ze altijd hier stellen!




« Vorige tutorial : [OOP] Een begin maken met OOP Volgende tutorial : Pagina navigatie in PHP en MySQL »

© 2002-2019 Sitemasters.be - Regels - Laadtijd: 0.019s