Système de votes : IP ou cookies ?

Eléphanteau du PHP | 41 Messages

05 juin 2011, 11:36

Bonjour, je suis en train de réaliser un système de votes, et j'aimerais avoir votre avis : quelle protection choisir entre l'adresse IP et les cookies ?
Je sais que l'idéal serait un système de login, mais je veux que ça reste le plus simple possible pour l'utilisateur... #-o

Merci pour vos avis :)

Eléphant du PHP | 127 Messages

05 juin 2011, 12:15

L'IP n'est pas un indicateur fiable puisqu'il peut changer d'un jour à l'autre. Il peut également y avoir plusieurs personnes sur la même IP (c'est de plus en plus le cas). De même les cookies peuvent tout à fait être effacés par l'utilisateur. Si tu souhaites un niveau de sécurité important, il n'y a que le certificat numérique.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 juin 2011, 12:19

Le problème de l'IP, c'est que tu n'as pas nécessairement la même adresse à chaque connexion et que dans certains établissements (écoles, bureaux ...), tu peux avoir une seule ip pour plusieurs utilisateurs...

Le problème du cookie, c'est que ça se refuse et/ou s'efface, et qu'il est possible de changer d'ordinateur ou de session...

Donc effectivement, la solution idéale c'est d'authentifier l'utilisateur pour savoir s'il a déjà voté. Mais ça ne reste qu'un vote donc tu n'as pas forcément besoin d'une sécurité maximale ;)

Côté réalisation, le système de cookie sera le plus simple à mettre en oeuvre (à ajouter et à contrôler), mais tu peux tout à fait combiner les deux :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 juin 2011, 12:20

salut,

les deux n'étant pas vraiment fiable je dirais les deux car dans la plus part des cas cela suffira :)

tu peux placer un cookie avec un "hash" et sauvegarder l'ip, tu regarde ensuite si l'un ou l'autre existe dans la tables des réponses.

tu peux aussi demander une adresse les gens n'en n'ont pas 400 ça limite un peu les soucis ;) (après faut vérifier le motif, le mieux serais de valider le vote avec un lien, mais je pense que tu va estimer cela trop contraignant ?).


@+

edit : nhachet : certificat numérique, genre en créer un par vote ? (comme les impots ^^), mais tu peux très bien le supprimer ou simplement changer de navigateur :)

bref pas de système 100% fiable :/
Il en faut peu pour être heureux ......

Eléphant du PHP | 127 Messages

05 juin 2011, 14:57

@moogli : ouaip comme les impôts. Disons que pour une sécurité optimale, il faudrait coupler un système d'authentification classique login/mot de passe avec un certificat numérique installé sur ton navigateur.

Maintenant je ne suis pas sûr que ce soit la problématique de street51. Perso pour des votes simples (genre +1 / j'aime / etc.), je calcule un hash des données de requêtes (tout simplement un md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['HTTP_HOST']); que je stocke en base et que je teste lors de l'ajout d'un nouveau vote.

Eléphanteau du PHP | 41 Messages

06 juin 2011, 17:37

Merci pour vos réponses, je vais donc conserver le système par cookies, même s'il est très facilement contournable.
Peut-être que j'y ajouterai un contrôle de l'IP, stockée dans une table remise à zéro toutes les heures par exemple.

nhachet, en quoi consiste ta méthode ?

Eléphant du PHP | 127 Messages

06 juin 2011, 19:29

L'idée est de stocker un hash de la concaténation de l'adresse IP cliente et de la signature du navigateur.

Eléphanteau du PHP | 41 Messages

06 juin 2011, 22:48

Merci, ça me semble pas mal comme solution, je vais faire ça. :)

Eléphanteau du PHP | 41 Messages

23 juin 2011, 10:52

Je reviens car le même problème se pose pour moi, mais avec l'iPhone cette fois-ci.
Existe-t-il un moyen d'identifier un iPhone ? Car j'imagine que la signature du navigateur ne doit pas changer d'un utilisateur à un autre, et je ne sais pas non plus comment fonctionne l'attribution de l'IP... :?

ViPHP
ViPHP | 2577 Messages

23 juin 2011, 11:14

Bonjour,

La signature du navigateur est propre à chaque version de navigateur. 2 utilisateurs utilisant IE9 par exemple auront la même signature. Cependant, il est possible de modifier la signature de son navigateur pour faire croire que l'on en utilise une autre.

Pour l'IP, en général le FAI attribue une adresse lors de la connexion à son réseau. Cette adresse est fournie pour une certaine durée. A la fin de la durée une demande est renvoyée pour renouvellement. Lors du renouvellement une autre adresse IP peut être attribuée. Souvent la même adresse est redonnée systématiquement mais il n'y a jamais de certitude sauf contrat spécifique d'IP fixe.

Je dirai que pour frauder, il suffit de redémarrer sa box et d'effacer les cookies.

Dans le cas de gestion via des utilisateurs, ils sont identifiés par leur adresse mail, mais rien n'empêche le propriétaire d'un nom de domaine de s'inscrire une infinité de fois sans trop de difficulté.

Eléphanteau du PHP | 41 Messages

23 juin 2011, 15:07

Merci, mais en fait j'ai réglé ce problème. mon souci concerne maintenant l'identification individuelle de chaque iPhone. :wink:

ViPHP
ViPHP | 2577 Messages

23 juin 2011, 15:17

Les iphones n'ont pas d'adresse IP ? et n'acceptent pas les cookies ?

Fais une page :
<?PHP
phpinfo();
?>
Et demande à un possesseur d'Iphone de l'appeler. Tu verras tout ce qui est dispo pour l'identifier.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2011, 15:55

le seul truc exploitable c'est le $_SERVER['HTTP_USER_AGENT'] et de chercher iphone dedans
par contre tu pourra différencier un navigateur sur iphone (par défaut a voir sur d'autre navigateur comme opéra) mais pas différencier deux tel différents (voir info de mazarini).

extrait du phpinfo :
Image

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 41 Messages

23 juin 2011, 16:52

Je vais faire un hash de $_SERVER['HTTP_USER_AGENT'] et $_SERVER['REMOTE_ADDR']; pour les iPhone, en espérant que ce soit efficace pour distinguer deux appareils différents. Merci pour vos réponses :wink: