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.