|
|
|
@ -40,7 +40,7 @@ function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$md5pass = ""; |
|
|
|
|
$shapass = $shanext = ""; |
|
|
|
|
$shapass = $pass_hash_next = ""; |
|
|
|
|
|
|
|
|
|
if ($pass) { |
|
|
|
|
$row = sql_fetsel("alea_actuel, alea_futur", "spip_auteurs", "login=" . sql_quote($login, $serveur, 'text'), '', '', |
|
|
|
@ -48,29 +48,32 @@ function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) {
|
|
|
|
|
|
|
|
|
|
if ($row) { |
|
|
|
|
include_spip('auth/sha256.inc'); |
|
|
|
|
$pass_poivre = hash_hmac("sha256", $pass, $GLOBALS['cle_secrete']); |
|
|
|
|
$pass_hash_next = password_hash($pass_poivre, PASSWORD_BCRYPT, ['salt' => $row['alea_futur']]); |
|
|
|
|
$shapass = spip_sha256($row['alea_actuel'] . $pass); |
|
|
|
|
$shanext = spip_sha256($row['alea_futur'] . $pass); |
|
|
|
|
$md5pass = md5($row['alea_actuel'] . $pass); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// login inexistant ou mot de passe vide |
|
|
|
|
if (!$shapass and !$md5pass) { |
|
|
|
|
} else { |
|
|
|
|
return array(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$row = sql_fetsel("*", "spip_auteurs", |
|
|
|
|
"login=" . sql_quote($login, $serveur, 'text') . " AND statut<>'5poubelle'", '', '', '', '', $serveur); |
|
|
|
|
|
|
|
|
|
include_spip("chiffrer_fonctions"); |
|
|
|
|
if ( $row["pass"] != $md5pass AND |
|
|
|
|
dechiffrer($row["pass"]) != $md5pass AND |
|
|
|
|
$row["pass"] != $shapass AND |
|
|
|
|
dechiffrer($row["pass"]) != $shapass ){ |
|
|
|
|
|
|
|
|
|
switch ( strlen($row["pass"]) ) { |
|
|
|
|
case 32: |
|
|
|
|
if ($row["pass"] != $md5pass) unset($row); |
|
|
|
|
break; |
|
|
|
|
case 60: |
|
|
|
|
if ( ! password_verify($pass_poivre, $row["pass"]) ) unset($row); |
|
|
|
|
break; |
|
|
|
|
case 64: |
|
|
|
|
if ( $row["pass"] != $shapass ) unset($row); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
unset($row); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// login/mot de passe incorrect |
|
|
|
|
if (!$row) { |
|
|
|
|
return array(); |
|
|
|
@ -78,15 +81,14 @@ function auth_spip_dist($login, $pass, $serveur = '', $phpauth = false) {
|
|
|
|
|
|
|
|
|
|
// fait tourner le codage du pass dans la base |
|
|
|
|
// sauf si phpauth : cela reviendrait a changer l'alea a chaque hit, et aucune action verifiable par securiser_action() |
|
|
|
|
if ($shanext and !$phpauth) { |
|
|
|
|
if ($pass_hash_next and !$phpauth) { |
|
|
|
|
|
|
|
|
|
include_spip('inc/acces'); // pour creer_uniqid |
|
|
|
|
@sql_update('spip_auteurs', array( |
|
|
|
|
'alea_actuel' => 'alea_futur', |
|
|
|
|
'pass' => sql_quote(chiffrer($shanext), $serveur, 'text'), |
|
|
|
|
'pass' => sql_quote($pass_hash_next, $serveur, 'text'), |
|
|
|
|
'alea_futur' => sql_quote(creer_uniqid(), $serveur, 'text') |
|
|
|
|
), "id_auteur=" . $row['id_auteur'] . ' AND pass IN (' . sql_quote($shapass, $serveur, |
|
|
|
|
'text') . ', ' . sql_quote($md5pass, $serveur, 'text') . ')', '', $serveur); |
|
|
|
|
), "id_auteur=" . $row['id_auteur'], '', $serveur); |
|
|
|
|
// En profiter pour verifier la securite de tmp/ |
|
|
|
|
// Si elle ne fonctionne pas a l'installation, prevenir |
|
|
|
|
if (!verifier_htaccess(_DIR_TMP) and defined('_ECRIRE_INSTALL')) { |
|
|
|
@ -271,12 +273,13 @@ function auth_spip_modifier_pass($login, $new_pass, $id_auteur, $serveur = '') {
|
|
|
|
|
|
|
|
|
|
$c = array(); |
|
|
|
|
include_spip('inc/acces'); |
|
|
|
|
include_spip('auth/sha256.inc'); |
|
|
|
|
include_spip("chiffrer_fonctions"); |
|
|
|
|
$htpass = generer_htpass($new_pass); |
|
|
|
|
$alea_actuel = creer_uniqid(); |
|
|
|
|
$alea_futur = creer_uniqid(); |
|
|
|
|
$pass = chiffrer(spip_sha256($alea_actuel . $new_pass)); |
|
|
|
|
$pass_poivre = hash_hmac("sha256", $new_pass, $GLOBALS['cle_secrete']); |
|
|
|
|
$pass = password_hash($pass_poivre, PASSWORD_BCRYPT, ['salt' => $alea_actuel]); |
|
|
|
|
|
|
|
|
|
$c['pass'] = $pass; |
|
|
|
|
$c['htpass'] = $htpass; |
|
|
|
|
$c['alea_actuel'] = $alea_actuel; |
|
|
|
|