diff --git a/ecrire/action/inscrire_auteur.php b/ecrire/action/inscrire_auteur.php index fd90a39d20a89adcbb1662ec8726ef09fdd61d7f..79a4c184435f9bdb0deb7dc9968120d7311cea10 100644 --- a/ecrire/action/inscrire_auteur.php +++ b/ecrire/action/inscrire_auteur.php @@ -348,11 +348,13 @@ function confirmer_statut_inscription($auteur) { */ function auteur_attribuer_jeton($id_auteur) { include_spip('inc/acces'); + include_spip('inc/securiser_action'); // s'assurer de l'unicite du jeton pour le couple (email,cookie) do { $jeton = creer_uniqid(); - sql_updateq('spip_auteurs', ['cookie_oubli' => $jeton], 'id_auteur=' . intval($id_auteur)); - } while (sql_countsel('spip_auteurs', 'cookie_oubli=' . sql_quote($jeton)) > 1); + $cle = calculer_cle_action($jeton); + sql_updateq('spip_auteurs', ['cookie_oubli' => $cle], 'id_auteur=' . intval($id_auteur)); + } while (sql_countsel('spip_auteurs', 'cookie_oubli=' . sql_quote($cle)) > 1); return $jeton; } @@ -369,10 +371,17 @@ function auteur_verifier_jeton($jeton) { return false; } + include_spip('inc/securiser_action'); + $cle = calculer_cle_action($jeton); + // on peut tomber sur un jeton compose uniquement de chiffres, il faut forcer le $type pour sql_quote pour eviter de planter - $desc = sql_fetsel('*', 'spip_auteurs', 'cookie_oubli=' . sql_quote($jeton, '', 'string')); + $desc = sql_fetsel('*', 'spip_auteurs', 'cookie_oubli=' . sql_quote($cle, '', 'string')); + // timing proof + if (verifier_cle_action($jeton, $desc['cookie_oubli'] ?? '')) { + return $desc; + } - return $desc; + return false; } /**