Hallo, ik heb zopas een filmpje gezien over PHP-security. Het ging hierbij op een moment over salting/rainbowtables etc.

Na heb bekijken van het filmpje kwam het hierp neer:

je hebt de gebruiker zijn psw die verstuurd wordt bij registratie
daarnaast heb je een vaste $salt die je in een config bijhoudt

en nu komt het

daarnaast heb je ook een unieke salt per persoon/gebruiker.

ik maakte er dan maar een functie van:

function salt($password){
		$salt = "abcjkl123";
		$user_salt = sha1(microtime());
		$password = md5($user_salt . $salt .  $password);
		return $password;
	}

nu ik snap het nut van de $user_salt echter wel, zo is niet elke hash hetzelfde (ook niet als er gebruikers zijn met eenzelfde paswoord). Maar het nut ontgaat me toch een beetje. Aangezien ik bij de login het wachtwoord moet kunnen terugvinden, heb ik de $user_salt ook nodig. Dus als ik het goed begrijp, dan moet ik deze bijhouden in een DB, wat is dan nog het nu ?

Begrijp ik het nu fout of niet? Kan iemand me hier even duidelijkheid brengen?

Hmm, duizenden computers :P
Geen idee hoe prof hackers het doen :p
Maar enigzins wel respect dat ze het kunnen,
Keur hun werk niet goed ofzo he!
je hebt inderdaad een punt als je zegt dat wanneer je je salt wil veranderen je miserie hebt. Langs de andere kant kan je ook met een array werken met bv 10 strings in dan is het nog moeilijker :-)

maar helemaal veilig ben je natuurlijk nooit
Ik was aan het denken :p

Als je nu eens altijd versleuteld met het IP vanwaar de account geregisteerd word,
Dat gegeven moet nooit veranderd worden, Kan opgeslagen worden ook in db om te decoderen.
En is een op elke account veranderende versleuteling :)
ja goed maar dat kan je ook gewoon met microtime().
het idee van Lode vind ik wel leuk gevonden
oke je laat toe A-Z en 0-9 -_ wellicht als pasword tekens.

<?php
function ValidatePassword($string){
if(preg_match('~^[\w-]{1,}$~D')){
//geldig
}
//blaat...
}
?>

En dan gaan we naar: http://www.asciitable.com/ zie de Dec(imal) column.
1 t/m 44 kunnen we dus gebruiken gezien ze niet in het wachtwoord voorkomen.
127 t/m 255 ook...

Jij weet dat... iemand anders niet natuurlijk...

Oke dan kan je die ASCII tekens dus random in het password gaan strooien..
En er ook weer uit filteren.

Dat is mijn random salt basis curses denk ik.

<?php
$chars = array_rand(
array_merge(
range(1, 44),
range(127, 255)
),
5);
//nou heb je 5 random extended ASCII nummers die je dan weer random in een string kan gooien middels http://nl.php.net/manual/en/function.chr.php
?>


Zolang je de salt maar niet "static" of "dynamic" gaat opslaan (in raw formaat), want dan kunnen er problemen ontstaan. Vooral de tekens 1 tm 44 kunnen niet "opgeslagen" worden. Je kan het wel als extra laag salting opnemen in de hash :-)

Reageren