Ich bin mir nicht ganz sicher ob ich dich richtig verstehe
nicht ganz =)
beim Login stellen wir ja bei dem Modell hier fest, ob der Hash neu gehasht werden sollte:
siehe Loginpasswort richtig hashen - password_hash() & password_verify()
if(password_verify($_POST['pw'].$pepper,$db_hash)){
# login ok
# hat sich evtl der PASSWORD_DEFAULT algo geändert, oder haben wir die COST geändert?
if(password_needs_rehash($db_hash,PASSWORD_DEFAULT,array('cost'=>COST))){
# ja, algo oder cost im hash sind nicht PASSWORD_DEFAULT-algo oder COST
# also den db_hash des eingelogten users aktualisieren:
$hash_update = password_hash($_POST['pw'].$pepper,PASSWORD_DEFAULT,array('cost'=>COST));
# hier sollte man daran denken, dass beim login das pw evtl 2 mal gehasht wird. Bedeutet doppelte zeit - also ~2xCOST
# für paranoide:
if(!password_verify($_POST['pw'].$pepper,$hash_update)){
# error ...
}else{
# UPDATE ... WHERE ...
}
}
}
Alles anzeigen
Der Gedanke ist jetzt password_needs_rehash() nicht bei jedem Login zu feuern. Denn das bedeutet ja doppeltes Hashen.
Und mit einer hohen COST kann das anstatt 1 oder 2 sec schon 4 oder mehr sein.
Also kurz; die Prüfung, ob der Hash neu gehasht werden muss, soll nur aller x Monate durchlaufen werden.
Per cron wird das nicht gehen. Der könnte zwar die db durch rennen, hätte aber nur die Hashes. Zum Rehashen brauchen wir ja aber das PW in clear text (vom Login).
Daher dachte ich an eine function die per Date irgendwie entscheidet, ob es mal wieder Zeit ist darauf Prüfen.
Mal ein Blödes Bsp (pseudocode):
if( Tag == 1.April ){
check if need to rehash
}
Weißt was ich meine`?