Pages :
Bonjour,
J'aimerais limiter une action a une fois par utilisateur.
Comment faire ?
Par IP, pour les autres de la famille ou pour un ordinateur public, ça pose problème.
Par localStorage, des petits malins peuvent le changer.
Comment faire ?
Merci !
Bonsoir,
Et bien du coup, à part un contrôle de session je ne vois pas. Autrement dit il faut nécessairement que l'utilisateur soit connecté au site pour pouvoir le suivre efficacement. Sinon il y aura toujours une possibilité de contournement. Après tout dépend de l'enjeu...
Je voulais juste avoir le meilleur moyen...
Si c'est l'IP ou localStorage qui sont le mieux, ce n'est pas grave, mais je voulais savoir s'il y en avait d'autre auxquels je n'ai pas pensé...

Olivier C a écrit :
un contrôle de session
Qu'est-ce que c'est ?

Olivier C a écrit :
l'utilisateur soit connecté au site
Un peu galère et pénible pour ça...

Olivier C a écrit :
Sinon il y aura toujours une possibilité de contournement.
Comment peut-il y en avoir le moins ?

Merci !
Modifié par js_html (09 Feb 2021 - 18:36)
Bonjour,
Jean-Pierre-Bruneau a écrit :
Olivier C t'a répondu mais tu semble ne pas comprendre qu'il ne faut jamais ouvrir un site web qui permette d'écrire, ou d'intervenir sans être authentifié, par un login

Effectivement, je n'avais pas compris ça dans sa réponse.
Sauf que le problème est que créer des comptes, c'est compliqué et que dans mon cas, c'est très pénible pour l'utilisateur.

Je souhaite juset effectuer un sondage et LIMITER le fait qu'ils puissent répondre plusieurs fois. Que me conseillerez-vous pour qu'il y ait le moins de possibilités de contournement : IP ? localStorage ? ou autre ?

Merci !
Par fiable, que souhaitez-vous dire ?
Autorisé ? Respectueux ? Possible ? Qui a peu de chances d'être contourné ?

Pensez-vous que mettre une donnée dans localStorage et d'enregistrer l'IP suffissent : s'il y a déjà la donnée dans localStorage, on bloque, si l'IP arrive plus de trois fois, on bloque ?

Merci !
Modérateur
Bonjour,

Alors voilà la meilleure méthode.

1) tu prends une première feuille de papier
2) tu écris dessus : "je n'essaie pas de faire des combines pour empêcher l'utilisateur de faire ce qu'il veut de sa machine, parce que ça ne marche pas"
3) tu prends une deuxième feuille de papier
4) tu écris dessus : "je passe par mon serveur pour vérifier ce que fait l'utilisateur de mon site, parce qu'il n'y a que ça qui marche"
5) tu affiches les deux feuilles au dessus de ton ordi

Amicalement,
1) J'ai fait ! Smiley smile
2) Il faut écrire ni trop petit ni trop gros... Smiley smile
3) C'est du gaspillage ça, non ? Smiley cligne
4)
parsimonhi a écrit :
je passe par mon serveur pour vérifier ce que fait l'utilisateur de mon site, parce qu'il n'y a que ça qui marche

Ça veut dire quoi ? Je ne comprends pas la signification de cette phrase... Smiley vieux
5) Mais on ne voit plus rien du coup, c'est le but ? Smiley cligne

Bon ! Non, je rigolais, sauf pour le 4), où je ne comprends vraiment pas... Smiley vieux

Mais, mettre une donnée dans localStorage et enregistrer l'IP suffissent : s'il y a déjà la donnée dans localStorage, on bloque, si l'IP arrive plus de trois fois, on bloque, non ? Pourquoi ça ne va pas ?

Merci !
Modérateur
Bonjour,

js_html a écrit :
Bon ! Non, je rigolais, sauf pour le 4), où je ne comprends vraiment pas... Smiley vieux


À chaque fois que le client demande un truc (une page, un fichier, etc.), il s'adresse au serveur, et au niveau du serveur tu peux enregistrer ce que tu veux et envoyer ce que tu veux.

js_html a écrit :
Mais, mettre une donnée dans localStorage et enregistrer l'IP suffissent : s'il y a déjà la donnée dans localStorage, on bloque, si l'IP arrive plus de trois fois, on bloque, non ? Pourquoi ça ne va pas ?


Tu peux certes faire ça. Mais tu peux aussi au niveau du serveur ne pas envoyer une 2e fois le formulaire par exemple (en vérifiant l'IP, ou n'importe quoi d'autre de spécifique au client).

Amicalement,
Ah ! Bien sûr, que je vérifierai l'IP grâce au serveur !

- On va sur la page,
- Le PHP vérifie que l'IP n'a pas déjà été enregistré au moins trois fois (si plusieurs membres de la famille sur différents appareils par exemple) et que localStorage est vide.,
- Si c'est bon, ça affiche le formulaire, sinon un message d'erreur,
- Si c'était bon, lors de l'envoi du formulaire, le serveur enregistre l'IP et le JS ajoute un truc au localStorage.
Ça va, comme ça ?

Merci !
Modérateur
Bonjour,

En gros, c'est l'idée. Tu peux même probablement te passer du localStorage.

Tu peux vérifier l'IP et peut-être d'autres infos. Ça dépend des navigateurs et éventuellement des configurations faites par l'utilisateur. Mais dans le cas général, l'IP, c'est déjà ça (surtout pour ce que tu veux faire). Il faut savoir aussi que pour certains, l'IP est changeante.

Amicalement,
parsimonhi a écrit :
Tu peux vérifier l'IP et peut-être d'autres infos.

Serait-il possible d'avoir d'autres exemples d'infos ?

parsimonhi a écrit :
Il faut savoir aussi que pour certains, l'IP est changeante.

C'était pour ça que je souhaitais ajouter localStorage pour une sécurité de plus...

Merci !
Modérateur
Bonjour,

js_html a écrit :

Serait-il possible d'avoir d'autres exemples d'infos ?

$_SERVER

js_html a écrit :

C'était pour ça que je souhaitais ajouter localStorage pour une sécurité de plus...

Tu y mettrais quoi ? Un nombre aléatoire que tu ne génères que lors de la 1re connexion ? Ou un timeStamp ? Ou un mixte des deux ?

Autant mettre ça dans un cookie : au moins tu pourras récupérer ce nombre côté serveur plus facilement. Parce qu'envoyer le contenu de localStorage d'une manière ou d'une autre au serveur est une mauvaise pratique (on ne fait qu'alourdir le fonctionnement alors qu'un cookie suffirait).

Amicalement,
Modifié par parsimonhi (01 Feb 2021 - 10:29)
Tu me conseilles de vérifier s'il y a plusieurs fois la même association de HTTP_USER_AGENT et REMOTE_ADDR (D'ailleurs c'est quoi la différence avec SERVER_ADDR ?) ?

Dans localStorage, je mettrais un item du genre 'connection', qui sera à 1 et, en JS, je vérifierais que 'connection' n'existe pas à la connexion à la page.

parsimonhi a écrit :
Autant mettre ça dans un cookie : au moins tu pourras récupérer ce nombre côté serveur plus facilement. Parce qu'envoyer le contenu de localStorage d'une manière ou d'une autre au serveur est une mauvaise pratique (on ne fait qu'alourdir le fonctionnement alors qu'un cookie suffirait).

Parce que tu imagines que je sais créer un cookie (je sais seulement en cuisine Smiley lol ) ? Smiley cligne

Merci !
Modérateur
Bonjour,

js_html a écrit :
Tu me conseilles de vérifier s'il y a plusieurs fois la même association de HTTP_USER_AGENT et REMOTE_ADDR (D'ailleurs c'est quoi la différence avec SERVER_ADDR ?) ?

1) REMOTE_ADDR = adresse du client (machine de l'utilisateur), SERVER_ADDR = adresse du server
2) Pour les vérifications, tu bricoles ce que tu veux

js_html a écrit :
Parce que tu imagines que je sais créer un cookie (je sais seulement en cuisine Smiley lol ) ? Smiley cligne


Supposons que côté serveur, tu viennes de traiter ton formulaire de sondage. Tu peux alors créer un cookie ayant pour nom "sondage" et pour valeur "1". Il faut de plus spécifier une durée d'expiration. On va supposer que c'est un an. Il faut juste faire attention que ce ne soit pas trop long car sinon on risque de dépasser la valeur max pour un entier : à tester sur ton serveur, s'il fonctionne en 32 bits, il faut pas aller au delà de l'année 2038. Pour vérifier si ton serveur fonctionne en 32 bits ou 64 bits, tu fais un echo de la constante PHP_INT_SIZE. Si c'est 4, c'est en 32 bits, si c'est 8, c'est en 64 bits.

EDIT: si ton serveur est en 64 bits, ce qui est probable, tu peux peut-être aller jusqu'à environ 20 fois l'âge de l'univers (à vérifier car il peut y avoir d'autres facteurs limitants, mais dans tous les cas, tu es tranquille pour le restant de tes jours).

Tu rajoutes alors dans ton code php :
setcookie('sondage',  "1", time()+3600*24*365);

C'est vrai que c'est hyper difficile. Smiley lol Smiley lol Smiley lol

Après, dans ton js, si tu veux voir les cookies relatifs à ta page, il suffit de regarder le contenu de document.cookie.

Amicalement,
Modifié par parsimonhi (01 Feb 2021 - 12:50)
Re-bonjour,
Zut j'ai oublié de cliquer sur Envoyé ! Je réécris donc :

1/ Merci ! Smiley cligne
2/ D'accord, je fais ce que je veux ! Smiley cligne

Effectivement, le code PHP n'est pas trop complexe : je pensais que cela serait beaucoup plus dur ! Smiley smile

Cependant, je ne comprends pas "document.cookie" !
Si je mets ça dans ma console navigateur sur ce site, ils m'écrivent "authkey=69c8844e002fd0cfba3i958219b6741d; authid=81417", mais "document.cookie.length" me donne 54. Pourquoi ?
"document.cookie" me donne tous les cookies ?

Et, si je mets juste ce cookie sur mon site, obligatoire, suis-obligé de mettre le bandeau de confirmation de cookie ?

Merci !
Modérateur
Bonjour,

js_html a écrit :
Mais "document.cookie.length" me donne 54. Pourquoi ?

C'est une chaine de caractères. Il y en a 54.

js_html a écrit :
"document.cookie" me donne tous les cookies ?

Oui, il ne faut pas que ce soit trop facile ! Smiley smile

js_html a écrit :
Et, si je mets juste ce cookie sur mon site, obligatoire, suis-obligé de mettre le bandeau de confirmation de cookie ?

S'il s'agit uniquement de cookies techniques du genre "sondage fait", non. S'il y a des données permettant d'identifier l'utilisateur, oui (l'IP en fait partie).

Amicalement,
Bonjour Jean-Pierre-Bruneau,
1) Donc cela est inutile ?
2) Même pour un tout petit cookie comme ça ?
3) Il faut faire un truc comme ça ?
setcookie('sondage',  "1", time()+3600*24*365, "HttpOnly" ;
?
Meilleure solution
Donc je ne dois pas utiliser les cookies ? Il faut mieux enregistrer l'IP en PHP et sauver une info sur le localStorage ?
Pages :