Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/07/2011, 21h22   #1
Membre actif
 
Inscription : décembre 2003
Messages : 415
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 415
Points : 187
Points : 187
Par défaut "Identifier" l'ordinateur du client

Bonjour,

Bon ... je reconnais que mon titre de sujet n'est pas top et peut paraître un peu mal-honnête à priori. Soyons clair : il n'en est point

Je souhaite en fait mettre en place sur un site un système de "votes". Un utilisateur (un compte) n'a le droit chaque jour de voter pour un même produit qu'une seule et unique fois.
Afin d'éviter toute triche (une personne qui créerait plusieurs comptes fictifs pour voter pour un produit qu'il souhaite "faire gagner") je souhaite savoir s'il y a moyen d'identifier (ou de générer un identifiant) un ordinateur client pour m'assurer ainsi que même avec différents compte, une personne ne pourra voter plusieurs fois pour un même produit.
Le problème n'est clairement pas la gestion des votes etc ici ... je cherche à savoir comment identifier le PC client.

Nous sommes d'accord que rien n'est inviolable. Et qu'une personne maîtrisant à un plus ou moins bon degrés les techno du web et outils disponibles sur la toile, pourra contourner le système. Mais ce pourcentage de population sur la cible du site reste évalué à minime. Donc tant pis.

Soyons clair, je ne veux pas simplement me baser sur l'@ IP. Ceci pour notamment le cas des petites entreprises ou le réseau est connecté derrière une box. Il faut que, dans l'entreprise si tous les employés ont un compte, ils puissent tous éventuellement voter pour le même produit.

Un système par cookie n'est pas suffisant. Idéalement, je souhaiterais que depuis un même PC si l'utilisateur vote une fois via IE ... il ne pourra pas voter avec un autre compte via Firefox. Ou tout simplement après suppression des cookies.

Quelles options me reste-t-il ?
Je suis preneur d'à peu près tout type de solution basé sur l'HTML/PHP et Javascript (pas de Flash)

Merci à quiconque s'intéressera à mon problème.
__________________
"La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...
Bleys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2011, 22h10   #2
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 246
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 246
Points : 1 504
Points : 1 504
Salut,

en plus de tes verifs (cookies, ip, etc..)
tu peux ajoute une table qui liste les ids utilisateurs, et les id produits pour lesquels ils ont vote.
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 09h09   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Quelle que soit la solution que tu vas prendre, le seul moyen sûr à 100% est de forcer l'utilisateur à s'authentifier. C'est en revanche très pénible pour lui. Pense à bien refuser la création de compte avec des faux emails (comme ceux de yopmail).
Pense aussi à mettre un capcha, y'aura toujours des gogos pour faire des robots

En d'autres-termes, il est pratiquement impossible d'identifier le navigateur du client (que ce soit par IP ou par cookie). C'est l'utilisateur que tu dois identifier.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 09h40   #4
Membre actif
 
Inscription : décembre 2003
Messages : 415
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 415
Points : 187
Points : 187
Bonjour,

... Je pense que j'ai été mal compris.

Nous sommes d'accord que sur le principe rien est inviolable. Je cherche juste à bloquer la majorité des utilisateurs + les petits bidouilleurs. Il existera toujours un moyen de contourner le système.

Doksuri > comme je l'ai dit, je ne cherche pas à savoir comment mettre en place le système de votes pour vérifier qu'un utilisateur ne votera qu'une seule fois par jour. Là n'est pas mon soucis ... (je redécris ci-après ce que je cherche en fait)

Benjamin >
Citation:
Quelle que soit la solution que tu vas prendre, le seul moyen sûr à 100% est de forcer l'utilisateur à s'authentifier
C'est déjà le cas en fait : ne peuvent voter que des utilisateurs enregistrés (et authentifiés).
Citation:
Pense à bien refuser la création de compte avec des faux emails (comme ceux de yopmail).
Justement mon soucis est en partie ce point là : il est impossible d'empêcher la création de faux comptes. Interdire les adresses yopmail spamavert et companie est aisé ... mais :
1- non exhaustif ;
2- insatisfaisant dans le sens où du moment que tu possède une adresse GMail ... tu possèdes une infinité d'adresses mails ... là encore tu me diras on peut faire un filtre dessus etc etc ... Mais deux vrais adresses ne sont pas compliquer à trouver non plus ;


Pour en revenir à ma question initiale, ce que je cherche à faire c'est qu'un PC ne puisse voter qu'une seule et unique fois par jour. Ma question est donc "comment réussir à identifier un PC ?"

Je cherche une solution HTML / PHP / Javascript.

Je sais que c'est éventuellement faisable en Java ... mais je ne souhaite pas m'en servir.
En Java (une applet) j'ai la possibilité de récupérer l'@ IP locale du PC ... à partir de là je peux générer un hash IP Publique / IP locale qui me permettra d'identifier le PC. Cette sécurité est aisée à contourner pour toute personne capable de configurer soit même son réseau ... mais comme je l'ai dit, ce n'est pas la cible du site, donc cette sécurité serait jugée comme acceptable (et puis on peut imaginer derrière prendre en compte le nom du PC ... et tout autre information disponible).

Donc ma question est, quelles méthodes d'identification du PC, comme je vous ai présenté avec l’applet Java, existe-t-il en PHP/Javascript (comprendre pas de Flash, pas de Java ....) et autre que Cookie et simplement REMOTE_HOST_ADRESS de l'en-tête HTTP ?


Quoiqu'il en soit, merci de m'avoir répondu.
__________________
"La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...
Bleys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h32   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Justement mon soucis est en partie ce point là : il est impossible d'empêcher la création de faux comptes. Interdire les adresses yopmail spamavert et companie est aisé ... mais :
1- non exhaustif ;
2- insatisfaisant dans le sens où du moment que tu possède une adresse GMail ... tu possèdes une infinité d'adresses mails ... là encore tu me diras on peut faire un filtre dessus etc etc ... Mais deux vrais adresses ne sont pas compliquer à trouver non plus ;
Tu ne pourra jamais te prémunir totalement contre le multi-compte.

Code :
Donc ma question est, quelles méthodes d'identification du PC, comme je vous ai présenté avec l’applet Java, existe-t-il en PHP/Javascript (comprendre pas de Flash, pas de Java ....) et autre que Cookie et simplement REMOTE_HOST_ADRESS de l'en-tête HTTP ?
Je ne pense pas (de mémoire) que JavaScript te permette d'avoir accès à l'IP locale de la machine - au pire pose ta question sur le forum JavaScript.
En revanche une vérification par cookie est assez aisée à fabriquer et relativement sécurisée si additionnée avec la vérification du membre.
Tu pourrais aussi t'orienter vers les certificats signés et HTTPS mais c'est une technologie que je ne maitrise pas et qui n'est pas gratuite (le certificat est payant, regarde par exemple sur http://www.verisign.com/).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h46   #6
Membre actif
 
Inscription : décembre 2003
Messages : 415
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 415
Points : 187
Points : 187
Citation:
Tu ne pourra jamais te prémunir totalement contre le multi-compte.
Nous sommes bien d'accord ...

Citation:
Je ne pense pas (de mémoire) que JavaScript te permette d'avoir accès à l'IP locale de la machine - au pire pose ta question sur le forum JavaScript.
Malheureusement non, moi non plus je ne crois pas que ce soit possible en JS (pur).
Je vais tout de même faire une ou deux petites recherches.

Citation:
Tu pourrais aussi t'orienter vers les certificats signés et HTTPS mais c'est une technologie que je ne maîtrise pas et qui n'est pas gratuite
Effectivement le certificats pourrait fonctionner ... mais comme tu le précises parfaitement : c'est payant ... et c'est, pour le moment, pas possible à mettre en place de notre côté.

Citation:
En revanche une vérification par cookie est assez aisée à fabriquer et relativement sécurisée si additionnée avec la vérification du membre.
Oui, je suis d'accord avec toi que par Cookie c'est facilement et rapidement faisable. Sauf que les cookies sont un peu les sytèmes de bases de sécurité que les gens connaissent. Donc le premier truc qu'ils essaient de contourner (sans parler des personnes qui configurent leur navigateur pour supprimer automatiquement les cookies à la fermeture ...). Ou comme je le disais simplement en changeant de navigateur (car les cookies ne sont pas partagés d'un navigateur à l'autre).


Dans le fond, mon sujet et plus une question ouverte : comment sécuriser au mieux (partant du principe que rien est inviolable) un tel système de vote à base de HTML / PHP / JS ?
- @IP publique uniquement => insuffisant (bloque le réseau complet d'une maison et non d'un ordinateur)
- Cookie simple => insuffisant : changement de navigateur et/ou nettoyage des cookie font sauter la protection.
- Récupération de l'@IP locale de la machine => ok ... mais semble impossible en JS, à explorer ...
- Certificats => contrainte de paiement non admissible dans mon cas
- Autre méthode ?


Merci pour votre investissement,
__________________
"La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...
Bleys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h58   #7
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
Citation:
Oui, je suis d'accord avec toi que par Cookie c'est facilement et rapidement faisable. Sauf que les cookies sont un peu les sytèmes de bases de sécurité que les gens connaissent. Donc le premier truc qu'ils essaient de contourner (sans parler des personnes qui configurent leur navigateur pour supprimer automatiquement les cookies à la fermeture ...). Ou comme je le disais simplement en changeant de navigateur (car les cookies ne sont pas partagés d'un navigateur à l'autre).
Après tout la vérification par cookie est un sous ensemble de la vérification par authentification. Je ne suis pas sûr du coup que ça vaille le coup, il suffit d'un vérification coté PHP au niveau de l'utilisateur.

Citation:
Dans le fond, mon sujet et plus une question ouverte : comment sécuriser au mieux (partant du principe que rien est inviolable) un tel système de vote à base de HTML / PHP / JS ?
Comme tu dis, rien n'est inviolable. Tu vérifie strictement tous les cas que tu sais prendre en charge, tu blinde le code de l'application et c'est tout ce que tu peux faire a moins de disposer des certificats.
De toute façon soyons honnêtes, personne ne va aller "pirater" ton système de vote pour le plaisir.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 10h59   #8
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
Bonjour,

Tu as dors et déjà listé toi même, je pense, toutes les possibilités offertes par les technos de ton projets.

Ce que tu peux chercher derrière ce sont des méthodes de blocage post-bypass (ouahouh le beau néologisme)
Exemple:
tu peux verifier qu'un type qui revote le lendemain ou se reconnecte dans la journée a toujours son cookie en place.
Tu peux sinon faire des tests croisés, coupler @ip et navigateur, etc.

Ou sinon j'y pense en écrivant cette réponse, c'est moche mais: FBconnect. Tous les votant doivent avoir FB pour voter. ça peut limiter un peu la casse, et ça donne une meilleur visibilité de ton site au niveau social ranking.
Mais bon... Facebook quoi ...
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h23   #9
Membre actif
 
Inscription : décembre 2003
Messages : 415
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 415
Points : 187
Points : 187
Je viens de voir qu'au sein de Javascript il existe un "wrapper" Java autorisant des appels à des méthodes statiques de package Java.

Il existe notamment, dans le package "net" dans la classe "InetAddress" la méthode "getLocalHost()".

En test en direct dans mon navigateur, cela ne semble pas pleinement fonctionner (je ne récupère rien). Peut-être une piste à explorer ?


Alors oui, je sais j'ai dit "pas de Java" ... mais je ne savais pas qu'il était possible de faire des appels Java depuis JS ... ce qui pour moi change la donne (pas de création d'applet, invisible pour l'utilisateur ...).
Je vais voir ce qu'il est donc faisable avec ça.

Citation:
Tu as dors et déjà listé toi même, je pense, toutes les possibilités offertes par les technos de ton projets.
dommage ... j'avais bon espoir

Citation:
Ce que tu peux chercher derrière ce sont des méthodes de blocage post-bypass (ouahouh le beau néologisme)
Exemple:
tu peux verifier qu'un type qui revote le lendemain ou se reconnecte dans la journée a toujours son cookie en place.
Tu peux sinon faire des tests croisés, coupler @ip et navigateur, etc.
Cela reveindrai en fait à faire une sorte de système expert qui apprend des utilisateurs et qui est capable de déterminer deux personnes pseudo-identique ... cela sous-entends une phase d'apprentissage du système (durant laquelle une personne va réussir à voter plusieurs fois pour un produit ...) ... c'est éventuellement à creuser ... mais trop complexe pour mon cas.

Citation:
Ou sinon j'y pense en écrivant cette réponse, c'est moche mais: FBconnect. Tous les votant doivent avoir FB pour voter. ça peut limiter un peu la casse, et ça donne une meilleur visibilité de ton site au niveau social ranking.
Mais bon... Facebook quoi ...
Ca peut effectivement réduire (on peut supposer que le nombre de compte FB est assez limité par utilisateur). Mais ceci est effectivement valable pour un site très orienté "réseau social" (l'obligation de connexion par FBConnect ... ça restreint ton publique).

Merci pour ton intervention cela dit


Et même merci à vous deux ...

Je vous tiens au courant pour mon test Javascript.
__________________
"La théorie, c’est quand on sait tout et que rien ne fonctionne. La pratique, c’est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : rien ne fonctionne ... et personne ne sait pourquoi !" et malheureusement c'est souvent le cas en Développement...
Bleys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h31   #10
Membre habitué
 
Inscription : décembre 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 181
Points : 140
Points : 140
Petite parenthèse hors sujet:
Citation:
Mais ceci est effectivement valable pour un site très orienté "réseau social"
Pour moi intégrer un système de vote c'est faire du social, en interne au site, mais c'est demande l'avis d'une communauté.
Je ne connais pas l'objet de ton site, mais très clairement si tu veux faire les choses "bien" joue la carte du social à fond, ne serait-ce que sur cet aspect là !
Au pire externalise ton vote sur un compte FB du site.
Je ne suis pas un FB Addict, mais il parait admis par la communauté e-marketeuse, qu'ajourd'hui les concept de FB et de webreput, sont incontournables.
roduce est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h39.


 
 
 
 
Partenaires

Hébergement Web