Est-il formidable de voter anonymement ?

Bonjour,

J’essaye de paramétrer le plugin Formidable pour créer un formulaire de vote.

  • Celui-ci n’est visible sur une zone restreinte qu’après identification (login / mot de passe).
  • Les réponses doivent être anonymes
  • Les utilisateurs ne doivent pas pouvoir tricher afin de voter plusieurs fois (par exemple en vidant leur cookies ou en changeant d’adresse IP).

Je ne trouve donc pas comment paramétrer Formidable pour arriver à mes besoins :

  • Si je n’anonymise pas mes formulaires, les administrateurs du site peuvent voir qui a voté quoi.
  • Si j’anonymise les réponses, il est possible de voter plusieurs fois en vidant leur cookies ou en changeant d’adresse IP

L’idéal serait d’associer à chaque réponse une saisie qui prend l’identifiant de l’auteur connecté et le crypte. Il ne resterait ensuite qu’à vérifier l’unicité du champ.

Connaissez-vous un moyen de répondre à ce besoin en paramétrant un plugin déjà existant ?

Cordialement,

Laurent

Bonsoir,

pas directement, mais

J'avance dans la recherche de solution à ce problème, et je viens de découvrir un truc pas très logique :

Lorsque l'on coche l'option "/modifiable : Les visiteurs peuvent modifier leurs réponses après coup./" et que l'on coche "/Par l’identifiant (id_auteur) de la personne authentifiée/" sur les options qui apparaissent, les résultats ne sont pas totalement anonymes même si on coche "/Résultats anonymes (ne pas garder de traces de l’identifiant des personnes ayant répondu)/". En effet, dans ce cas, le champ "id utilisateur" est rempli sans cryptage. Les webmestres peuvent donc voir les réponses de tout le monde (bien que les auteurs n'apparaissent plus sur l'interface).

Par compte, ce cas de figure m’intéresse car il prend le dessus sur la logique d'anonymisation et permet d'interdire aux internautes de "tricher" lors d'un vote en publiant plusieurs réponses (en supprimant leur cookies ou en utilisant un autre appareil par exemple). Mais pourquoi réduire cette possibilité aux seuls formulaires dont les réponses sont modifiables ?

*Donc, dans l'absolu il faudrait :*

1./ Fusionner les option "/Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?/" et "/Quelle variable système utiliser pour calculer une valeur unique pour chaque auteur sans pour autant révéler son identité." /et faire en sorte que ce paramètre soit utilisé à la fois pour empêcher les réponse multiples, pour rendre les réponses modifiables et pour anonymiser les réponses./
/
2./ Crypter l'id_auteur dans le cas ou les options "/Par l’identifiant (id_auteur) de la personne authentifiée/" et "/Résultats anonymes (ne pas garder de traces de l’identifiant des personnes ayant répondu)./" sont tout deux cochés.

Qu'en pensez-vous ?

Le 18/12/2019 à 21:47, chankalan@choc0.net a écrit :

Bonsoir,

Le 18/12/2019 à 18:19, Laurent a écrit :

L'idéal serait d'associer à chaque réponse une saisie qui prend l'identifiant de l'auteur connecté et le crypte. Il ne resterait ensuite qu'à vérifier l'unicité du champ.

Connaissez-vous un moyen de répondre à ce besoin en paramétrant un plugin déjà existant ?

pas directement, mais je crois bien que c'est le principe à la désinscription d'une liste dans mailsubscribers, au bout d'un temps donné, les courriels sont masqués... peut-être voir comment ça marche...
--

----
chan

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Après vérification, je ne disposai pas de la dernière version de formidable (loi de là) et des modifications ont été effectuées sur le formulaire "Configurer les traitements".

Avec la dernière version, j'ai ajouté la possibilité d'utiliser une méthode d'identification par l'identifiant de la personne identifiée tout en anonymisant les réponses.

ça donne cela :

C'est utile pour rendre un vote fiable et anonyme. Donc j'imagine que ça peut être utile pour d'autre.

Dites-moi ce que vous en pensez.

Le 18/12/2019 à 22:48, Laurent a écrit :

J'avance dans la recherche de solution à ce problème, et je viens de découvrir un truc pas très logique :

Lorsque l'on coche l'option "/modifiable : Les visiteurs peuvent modifier leurs réponses après coup./" et que l'on coche "/Par l’identifiant (id_auteur) de la personne authentifiée/" sur les options qui apparaissent, les résultats ne sont pas totalement anonymes même si on coche "/Résultats anonymes (ne pas garder de traces de l’identifiant des personnes ayant répondu)/". En effet, dans ce cas, le champ "id utilisateur" est rempli sans cryptage. Les webmestres peuvent donc voir les réponses de tout le monde (bien que les auteurs n'apparaissent plus sur l'interface).

Par compte, ce cas de figure m’intéresse car il prend le dessus sur la logique d'anonymisation et permet d'interdire aux internautes de "tricher" lors d'un vote en publiant plusieurs réponses (en supprimant leur cookies ou en utilisant un autre appareil par exemple). Mais pourquoi réduire cette possibilité aux seuls formulaires dont les réponses sont modifiables ?

*Donc, dans l'absolu il faudrait :*

1./ Fusionner les option "/Si les réponses sont modifiables, quel procédé utiliser en priorité pour connaitre la réponse à modifier ?/" et "/Quelle variable système utiliser pour calculer une valeur unique pour chaque auteur sans pour autant révéler son identité." /et faire en sorte que ce paramètre soit utilisé à la fois pour empêcher les réponse multiples, pour rendre les réponses modifiables et pour anonymiser les réponses./
/
2./ Crypter l'id_auteur dans le cas ou les options "/Par l’identifiant (id_auteur) de la personne authentifiée/" et "/Résultats anonymes (ne pas garder de traces de l’identifiant des personnes ayant répondu)./" sont tout deux cochés.

Qu'en pensez-vous ?

Le 18/12/2019 à 21:47, chankalan@choc0.net a écrit :

Bonsoir,

Le 18/12/2019 à 18:19, Laurent a écrit :

L'idéal serait d'associer à chaque réponse une saisie qui prend l'identifiant de l'auteur connecté et le crypte. Il ne resterait ensuite qu'à vérifier l'unicité du champ.

Connaissez-vous un moyen de répondre à ce besoin en paramétrant un plugin déjà existant ?

pas directement, mais je crois bien que c'est le principe à la désinscription d'une liste dans mailsubscribers, au bout d'un temps donné, les courriels sont masqués... peut-être voir comment ça marche...
--

----
chan

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail àspip-off@rezo.net

Archives :https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos :https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP :http://www.spip.net/

Irc : de l'aide à toute heure :http://spip.net/irc

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc

Le 19/12/2019 à 13:04, Laurent a écrit :

Après vérification, je ne disposai pas de la dernière version de formidable (loi de là) et des modifications ont été effectuées sur le formulaire "Configurer les traitements".

Avec la dernière version, j'ai ajouté la possibilité d'utiliser une méthode d'identification par l'identifiant de la personne identifiée tout en anonymisant les réponses.

ça donne cela :
Connexion · GitLab

C'est utile pour rendre un vote fiable et anonyme. Donc j'imagine que ça peut être utile pour d'autre.

Dites-moi ce que vous en pensez.

Ces histoire d'anonymisation et d'identification sont une plaie. J'avais pas mal galeré à mettre un truc un peu près cohérent il y a un ans sur le sujet. Et j'avoue que j'ai un peu oublié ce qu'il en est (même si les messages de commits sont documentés). Est-ce que tu pourrais produire une documentation de synthèse la dessus ? (Par exemple sur contrib)

Sinon je viens de parcourir rapidement ton commit. J'ai trois remarques pour assurer une qualité du code

1. dans traiter/enregistrement.php. 24 tu duplique du code l. 190 de inc/formidable.php dans formidable_verifier_reponse_formulaire()
  a. Dupliquer le code c'est mal
  b. C'est d'autant plus mal que dans le cas présent, si jamais on fait une modif à un endroit, ca risque de casse
  c. Par conséquent je t'invite à mettre tout cela dans une fonction à part
2. Tu fais un preg_replace en remplacant tout les caractères alphabétique dans le hash. Je comprend l'idée (rendre plus anonyme les choses), mais tu perd du coup en contrainte d'unicité, car tu risque d'avoir des collusions, en ayant deux "hash filtré" portant la même suite de chiffre (c'est d'ailleurs l'un des problèmes classiques du vote electronique : on ne ne peut pas vraiment assurer à la fois l'anonymat et l'unicité). En outre, les tests vont voir des suiotes des chiffre et vont tenter d'associer cela à un utilisateur. Bref, ce n'est pas une bonne solution.
  a. Supprime le filtrage des lettres
  b. Plutot que de hasher directement l'identifiant, hash sa concaténation avec secret_du_site()
  c. Comme son nom l'indique, secret du site est une valeur secrete de site. Seule les webmestre peuvent y avoir accès. Avec ca, tu limite les possibilités d'authentifications (mais pas totalement, car cela repose sur le tiers de confiance : c'est d'ailleurs le problème du vote electronique....)
3. Dans formidable_verifier_reponse_formulaire() tu refais un appel à base sql pour optenir la configuration de l'enregistrement. C'est un peu idiot car on a deja ces infos dans les fonctions appellante. Je t'invite plutot à passser directement les options à formidable_verifier_reponse_formulaire() comme paramètre (et donc modifier le code)

Une fois cela fait, je t'inviterais à soumettre un pull request

Je met en copie Rastapopulos, pour avoir aussi son avis.

Bonjour,

Merci pour ta réponse.

J'ai modifier le code en fonction de tes remarques. Voici ce que ça donne :

J'ai du passer le champ /variable_php/ en varchar pour qu'il puisse prendre en compte les lettres.
(je préfère utiliser ce champ plutôt que de passer id_auteur en varchar)

Pour la documentation de synthèse, je propose de remplacer la partie inférieure de cet article :

avec le texte ci-dessous.

Pour le reste, vos remarques sont les bienvenues.

      {{{Enregistrer les résultats du formulaire dans la base de données}}}

{{Une fois cette case cochée, un certain nombre d'options s’affichent. Il est notamment possible de rendre les réponses au formulaire :}}
- {{Multiples}} : une même personne peut répondre plusieurs fois.
- {{Modifiables}} : les visiteurs peuvent modifier leurs réponses après coup.

        {{{**Méthode d’identification}}}

Dans le cas ou votre formulaire comprend des réponses modifiables ou uniques, un encart apparaîtra afin de définir une méthode d'identification des réponses :

- Soit {{par cookie}} (l'identification dépendra du navigateur sur lequel l'utilisateur rempli le formulaire. Si celui-ci n'autorise pas les cookies, l'identifiant de la personne authentifiée et la méthode d'identification par variable de connexion PHP seront utilisées à la place de cette méthode).
- Soit par {{identifiant de la personne identifiée}} (utile pour les formulaires nécessitant la création d'un compte à priori. Si l’utilisateur n'est pas connecté, la méthode d'identification par cookie sera utilisée à la place de cette méthode).
- Soit par {{identifiant de la réponse passée}} explicitement lors de l’appel au formulaire dans un squelette. ( Cette méthode permet de forcer l'affichage d'une réponse particulière. )
- Soit par{{ variable de connexion PHP}} (l'identification dépendra d'une variable d'environnement fournie par l'utilisateur. Si celle-ci n'existe pas, l'identifiant de la personne authentifiée et l'identification par cookies seront utilisées à la place de cette méthode).

        {{{**protection des données personnelles}}}

Il est également possible de paramétrer la protection des données personnelles des utilisateurs :

- {{En ne conservant pas l’identifiant de la personne connectée}} (si la méthode d'identification est justement cet identifiant, celui-ci sera d'abord crypté avant d'être stocké en base).
- {{En demandant l’effacement des résultats les plus anciens de la table}} (une fois la case cochée, il sera possible de définir le nombre de jours pendant lesquels on garde l’enregistrement avant d’effacer).
- {{En choisissant d'enregistrer ou non les IPs des utilisateurs}} (ces résultats seront masqués après un délai de garde).

Enfin, quelques autres options sont disponibles. Elles concernent :
- La {{modération de l’enregistrement}} (à priori ou à posteriori).
- L'{{exclusion des champs de l'analyse des résultats proposée par formidable.}}
- Le {{rafraîchissement du cache}} à chaque enregistrement de réponses (utile si les réponses sont publiques ou si on veut afficher publiquement le nombre de réponses).

Le 19/12/2019 à 13:30, Maïeul a écrit :

Le 19/12/2019 à 13:04, Laurent a écrit :

Après vérification, je ne disposai pas de la dernière version de formidable (loi de là) et des modifications ont été effectuées sur le formulaire "Configurer les traitements".

Avec la dernière version, j'ai ajouté la possibilité d'utiliser une méthode d'identification par l'identifiant de la personne identifiée tout en anonymisant les réponses.

ça donne cela :
Connexion · GitLab

C'est utile pour rendre un vote fiable et anonyme. Donc j'imagine que ça peut être utile pour d'autre.

Dites-moi ce que vous en pensez.

Ces histoire d'anonymisation et d'identification sont une plaie. J'avais pas mal galeré à mettre un truc un peu près cohérent il y a un ans sur le sujet. Et j'avoue que j'ai un peu oublié ce qu'il en est (même si les messages de commits sont documentés). Est-ce que tu pourrais produire une documentation de synthèse la dessus ? (Par exemple sur contrib)

Sinon je viens de parcourir rapidement ton commit. J'ai trois remarques pour assurer une qualité du code

1. dans traiter/enregistrement.php. 24 tu duplique du code l. 190 de inc/formidable.php dans formidable_verifier_reponse_formulaire()
a. Dupliquer le code c'est mal
b. C'est d'autant plus mal que dans le cas présent, si jamais on fait une modif à un endroit, ca risque de casse
c. Par conséquent je t'invite à mettre tout cela dans une fonction à part
2. Tu fais un preg_replace en remplacant tout les caractères alphabétique dans le hash. Je comprend l'idée (rendre plus anonyme les choses), mais tu perd du coup en contrainte d'unicité, car tu risque d'avoir des collusions, en ayant deux "hash filtré" portant la même suite de chiffre (c'est d'ailleurs l'un des problèmes classiques du vote electronique : on ne ne peut pas vraiment assurer à la fois l'anonymat et l'unicité). En outre, les tests vont voir des suiotes des chiffre et vont tenter d'associer cela à un utilisateur. Bref, ce n'est pas une bonne solution.
a. Supprime le filtrage des lettres
b. Plutot que de hasher directement l'identifiant, hash sa concaténation avec secret_du_site()
c. Comme son nom l'indique, secret du site est une valeur secrete de site. Seule les webmestre peuvent y avoir accès. Avec ca, tu limite les possibilités d'authentifications (mais pas totalement, car cela repose sur le tiers de confiance : c'est d'ailleurs le problème du vote electronique....)
3. Dans formidable_verifier_reponse_formulaire() tu refais un appel à base sql pour optenir la configuration de l'enregistrement. C'est un peu idiot car on a deja ces infos dans les fonctions appellante. Je t'invite plutot à passser directement les options à formidable_verifier_reponse_formulaire() comme paramètre (et donc modifier le code)

Une fois cela fait, je t'inviterais à soumettre un pull request

Je met en copie Rastapopulos, pour avoir aussi son avis.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : envoyer un mail à spip-off@rezo.net

Archives : https://www.mail-archive.com/spip@rezo.net/maillist.html

Infos : https://listes.rezo.net/mailman/listinfo/spip

Documentation de SPIP : http://www.spip.net/

Irc : de l'aide à toute heure : http://spip.net/irc