Rendre le formulaire d'oubli du mot de passe plus conforme aux conventions de sécurité - avec PATCH -
Voici le message de David Prévot sur spip-team
> Actuellement, si l’adresse n’est pas dans la base de donnée, l’erreur > suivante est servie : > > Erreur : l’adresse n’est pas enregistrée sur ce site. > > Alors que si l’adresse existe, le message suivant est affiché : > > Vous allez recevoir un email vous indiquant comment retrouver votre > accès au site. > > (L’identifiant est même envoyé en clair dans le courrier électronique.) > > > Un comportement plus neutre pourrait être, comme on le voit souvent, un > message du genre « Si l’adresse est dans la base de donnée, un message > sera envoyé en indiquant comment retrouver votre accès au site. »Pour répondre à cela, j'ai simplement créé un fichier squelettes/lang/local_fr.php contenant
$GLOBALS[$GLOBALS['idx_lang']] = array(
'pass_recevoir_mail' => "Si votre email est inscrit sur le site vous allez recevoir un email vous indiquant comment retrouver votre accès au site."
);
Puis fais en sorte que le formulaire d'oubli (oubli.php) ne retourne jamais d'erreur (hors problème technique de livraison)
25a26,46
>
> $r = formulaires_oubli_mail($email);
>
> if (!is_array($r)) {
> $erreurs['oubli'] = $r;
> } else {
> if (!$r[1]) {
> $erreurs['oubli'] = _T('pass_erreur_non_enregistre', array('email_oubli' => spip_htmlspecialchars($email)));
> } elseif ($r[1]['statut'] == '5poubelle' or $r[1]['pass'] == '') {
> $erreurs['oubli'] = _T('pass_erreur_acces_refuse');
> }
> }
>
> spip_log("Un utilisateur a effectué une demande de mot de passe oublié sur un email inexistant : " . $erreurs['oubli'],'spip');
>
> if ($erreurs['oubli']) {
> return _T('pass_recevoir_mail');
> }
>
> unset($erreurs['oubli']);
>
72,85d92
<
< $email = strval(_request('oubli'));
<
< $r = formulaires_oubli_mail($email);
<
< if (!is_array($r)) {
< $erreurs['oubli'] = $r;
< } else {
< if (!$r[1]) {
< $erreurs['oubli'] = _T('pass_erreur_non_enregistre', array('email_oubli' => spip_htmlspecialchars($email)));
< } elseif ($r[1]['statut'] == '5poubelle' or $r[1]['pass'] == '') {
< $erreurs['oubli'] = _T('pass_erreur_acces_refuse');
< }
< }
Le test sur l'existence du mail est réalisé désormais juste avant l'envoi.