Rendre le formulaire d'oubli du mot de passe plus conforme aux conventions de sécurité - avec PATCH - #4171

Closed
opened 3 years ago by gilles.vincent · 10 comments
Collaborator

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.

Voici le message de David Prévot sur spip-team <cite> > Actuellement, si l’adresse n’est pas dans la base de donnée, l’erreur > suivante est servie : > > Erreur : l’adresse <truc`example.org> 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. » </cite> 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.
b_b commented 3 years ago
Owner

À faire sur le trunk et à reporter en 3.2 uniquement car modif de chaîne de langue.
Version cible mise à 4.0

À faire sur le trunk et à reporter en 3.2 uniquement car modif de chaîne de langue. **Version cible mise à 4.0**
b_b commented 3 years ago
Owner

Peux-tu fournir ton patch au format diff stp ?

Reste aussi à valider ou améliorer le nouvel item de langue.
Statut changé à En cours

Peux-tu fournir ton patch au format diff stp ? Reste aussi à valider ou améliorer le nouvel item de langue. **Statut changé à En cours**
Collaborator

Une autre proposition nous a été faite:
"Un email de réinitialisation de mot de passe vous a été envoyé sur votre adresse e-mail si cette dernière est valide. "

Cela me semble plus fluide et plus simple à comprendre que le message initial proposé:
"Si votre email est inscrit sur ce site, vous allez recevoir un email vous indiquant comment retrouver votre accès au site."

Une autre proposition nous a été faite: "Un email de réinitialisation de mot de passe vous a été envoyé sur votre adresse e-mail si cette dernière est valide. " Cela me semble plus fluide et plus simple à comprendre que le message initial proposé: "Si votre email est inscrit sur ce site, vous allez recevoir un email vous indiquant comment retrouver votre accès au site."

Peut-être éviter de répéter email ?
"Une demande de réinitialisation du mot de passe vous a été envoyée sur votre adresse e-mail si cette dernière est valide."

Sinon, utilise-t-on "courriel" déjà dans SPIP ?

Peut-être éviter de répéter email ? "Une demande de réinitialisation du mot de passe vous a été envoyée sur votre adresse e-mail si cette dernière est valide." Sinon, utilise-t-on "courriel" déjà dans SPIP ?
Owner

on a toujours pas corrigé ce problème dans la 3.3 ?

on a toujours pas corrigé ce problème dans la 3.3 ?
b_b commented 2 years ago
Owner

Testé à l'instant et on dirait bien que non.

Testé à l'instant et on dirait bien que non.
Owner
Corrigé sur la 3.3 par https://zone.spip.org/trac/spip-zone/changeset/117577 et http://core.spip.org/projects/spip/repository/revisions/24367 donc
Owner
et le oups https://zone.spip.org/trac/spip-zone/changeset/117578
b_b commented 2 years ago
Owner

Et le triple oups pour conclure r24368 :p

Et le triple oups pour conclure r24368 :p
b_b commented 2 years ago
Owner

On ferme :)
Statut changé à Fermé

On ferme :) **Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.