possible d'ouvrir une page qu'une fois par connection

Eléphanteau du PHP | 43 Messages

29 août 2007, 20:46

Bonjour,

Je suis en train de faire un site qui est d'ailleur bientot fini.

mais j'ai trouvé un bug de sécurité, en effet
il y a une page qui fait gagné des points toute les x secondes(simule les personne payant a une caisse)
le problème est que l'on peut oiuvrir autant de fois la page qu'on le souhaite et alors multiplié les gains

Donc je voudrais savoir comment faire ?

merci

ViPHP
AB
ViPHP | 5818 Messages

29 août 2007, 23:37

Ben avec une variable de session ou un cookie tu pourrais toujours essayer de compter le nombre de fois que le visiteur affiche cette page.

Mais ce ne sera pas absolument sécurisé pour autant car si tu utilises une session le visiteur pourra fermer son navigateur puis se reconnecter. Et si tu utilises un cookie, le visiteur peut l'effacer ou le modifier.

C'est possible que tu aies un pb de méthode dans le gain de points, car tel quel je ne vois rien qui puisse permettre de sécuriser le système pour un utilisateur averti. Les méthodes que je t'ai indiquées te permettront de réduire le taux de "fraude" mais pas de les annuler totalement (si j'ai bien compris le fonctionnement de ton script).

Mammouth du PHP | 693 Messages

30 août 2007, 09:49

Si on accède à ton site via une authentification, tu peux enregistrer ceux qui ont visiter la page puis a chaque fois vérifier si l'utilisateur est bien différent.

Eléphant du PHP | 291 Messages

30 août 2007, 10:18

Si authentification forcée > stocker la date de l'appel de la page, puis vérifier que l'utilisateur n'y a pas été depuis XXX temps

Sinon, tu peux sauvegarder l'IP appellante et te baser dessus pour controller... (HTTP_X_FORWARDED_FOR, REMOTE_ADDR...)

Ça demandera déjà beaucoup d'effort pour arriver à ses fins, après ça dépend du niveau de sécurisation que tu veux obtenir...

Eléphanteau du PHP | 43 Messages

30 août 2007, 12:49

Si authentification forcée > stocker la date de l'appel de la page, puis vérifier que l'utilisateur n'y a pas été depuis XXX temps

Sinon, tu peux sauvegarder l'IP appellante et te baser dessus pour controller... (HTTP_X_FORWARDED_FOR, REMOTE_ADDR...)

Ça demandera déjà beaucoup d'effort pour arriver à ses fins, après ça dépend du niveau de sécurisation que tu veux obtenir...
bonjour,

Admettons que le temps de rafraîchissement de la page est réglé a 40 secondes

j'enregistre le timenamp à l'arrivée sur la page puis après à chaque fois que la page se rafraîchit je fais un
if($vartime <= "40") {
   echo "message d'erreur";
}else{
   echo "affichage de la page";
}
c'est bien ça ou pas ?

Eléphant du PHP | 291 Messages

30 août 2007, 12:56

Par exemple oui ! Ca serait même, plus précisément :
if($vartime <= "40") {
   echo "message d'erreur";
}else{
   echo "affichage de la page";
   mysql_query('UPDATE table SET timestamp = NOW() WHERE ip = '.$userIP);
} 
;)

ViPHP
AB
ViPHP | 5818 Messages

30 août 2007, 20:45

Par exemple oui ! Ca serait même, plus précisément :
if($vartime <= "40") {
   echo "message d'erreur";
}else{
   echo "affichage de la page";
   mysql_query('UPDATE table SET timestamp = NOW() WHERE ip = '.$userIP);
} 
;)
Attention danger, cette méthode n'est pas fiable. Un peu de doc pour vous en convaincre http://frederic.bouchery.free.fr/?2004/ ... p-Ip-Houra

Eléphant du PHP | 291 Messages

30 août 2007, 20:58

On n'a jamais prétendu le contraire ;)
C'est pour cela que j'ai spécifié :
ça dépend du niveau de sécurisation que tu veux obtenir...
Mais bon, avec le peu d'information qu'on a sur le système, c'est, comme tu l'as dis difficile|impossible (rayez la mention inutile ;)) d'obtenir un risque de fraude nul :s

ViPHP
AB
ViPHP | 5818 Messages

30 août 2007, 21:11

On n'a jamais prétendu le contraire ;)
C'est pour cela que j'ai spécifié :
ça dépend du niveau de sécurisation que tu veux obtenir...
Mais bon, avec le peu d'information qu'on a sur le système, c'est, comme tu l'as dis difficile|impossible (rayez la mention inutile ;)) d'obtenir un risque de fraude nul :s
on est bien d'accord :wink: sauf qu'en plus de ne pas éviter toute la "fraude" cette méthode va bloquer des joueurs "honnêtes".

Il me semble que
Si authentification forcée > stocker la date de l'appel de la page, puis vérifier que l'utilisateur n'y a pas été depuis XXX temps
est la meilleure solution. Reste ensuite à gérer les joueurs qui voudront s'enregistrer sous plusieurs pseudo.

ViPHP
ViPHP | 5924 Messages

30 août 2007, 21:14

On n'a jamais prétendu le contraire ;)
C'est pour cela que j'ai spécifié :
ça dépend du niveau de sécurisation que tu veux obtenir...
Mais bon, avec le peu d'information qu'on a sur le système, c'est, comme tu l'as dis impossible d'obtenir un risque de fraude nul :s
… :-/

ViPHP
AB
ViPHP | 5818 Messages

30 août 2007, 21:34

On n'a jamais prétendu le contraire ;)
C'est pour cela que j'ai spécifié :
ça dépend du niveau de sécurisation que tu veux obtenir...
Mais bon, avec le peu d'information qu'on a sur le système, c'est, comme tu l'as dis impossible d'obtenir un risque de fraude nul :s
… :-/
Oui, j'ai pas été clair. Je voulais dire :
- une solution serait l'authentification.
- une autre solution serait un système de cookie ou de sessions.

- mais l'identification par ip n'est pas une solution car en plus d'avoir plus de défauts que les deux premières concernant la sécurité, elle empêcherait des joueurs "honnêtes" de jouer :wink:

(mais peut-être tu n'as pas lu le topic depuis le début)

Eléphant du PHP | 291 Messages

30 août 2007, 21:41

A la limite, une identification horrible du genre :

IP + Session + Cookie + Configuration du poste Client (navigateur, OS, résolution, géo-localisation)...


Enfin il est tard, je pars dans le farfelue !

ViPHP
AB
ViPHP | 5818 Messages

30 août 2007, 22:26

A la limite, une identification horrible du genre :

IP + Session + Cookie + Configuration du poste Client (navigateur, OS, résolution, géo-localisation)...

Enfin il est tard, je pars dans le farfelue !
Non j'y crois pas :lol: Si tu lis cette doc http://frederic.bouchery.free.fr/?2004/ ... p-Ip-Houra
tu comprendras que non, nada, niet, no, l'adresse ip ne peut pas être utilisée dans ce cas de figure.

Imagine par exemple plusieurs empoyés qui veulent jouer (durant leur temps de pose évidemment :wink: ) depuis leur entreprise.
REMOTE_ADDR renverra l'adresse IP du proxy et si la configuration du serveur est en mode anonyme, aléatoire ou hautement anonyme - il y a de grandes chances que ce soit une des trois pour des raisons de confidentialité - HTTP_X_FORWARDED_FOR renverra respectivement l'adresse IP du proxy, une IP aléatoire pour chaque requête, ou rien.

A part te casser la tête, je vois pas bien comment tu pourras exploiter ces "informations".

Et l'exemple ci-dessus s'applique à de plus en plus de particuliers qui partagent leur connexion internet (pour toute la famille, ou pour tout un immeuble pour une utilisation sporadique).
Modifié en dernier par AB le 30 août 2007, 22:31, modifié 2 fois.

Eléphanteau du PHP | 43 Messages

30 août 2007, 22:27

si je met un imput caché qui contient l'id de session, puis au rafraîchissement de la page faire une vérification avec un if() ?

Je pense que le problème peut être résolu qu'avec la session et le timesnamp

ViPHP
AB
ViPHP | 5818 Messages

30 août 2007, 23:11

si je met un imput caché qui contient l'id de session, puis au rafraîchissement de la page faire une vérification avec un if() ?

Je pense que le problème peut être résolu qu'avec la session et le timesnamp
Le système de session peut être utilisé. C'est une solution qui marchera pour tout le monde (car certains bloquent les cookies) mais qui est aussi la plus facilement contournable puisqu'il suffit de fermer son navigateur et de le réouvrir pour démarrer une nouvelle session. Maintenant tout dépend du niveau de sécurité que tu souhaites, évidemment.

Une solution un peu plus élaborée serait d'ajouter à cette première méthode, l'emploi de cookie - avec avertissement uniquement pour les utilisateurs qui ont bloqué les cookies, tu les empêches de jouer tant qu'il n'ont pas réactiver la réception de cookies.
Avec la session tu les empêche de rejouer tant qu'il sont dans la même session.
Avec le cookie, (pas un cookie de session bien entendu), tu stockes l'heure de connexion dans le cookie et tu les empêche de rejouer avant l'heure de connexion + 24 h par exemple.

Evidemment un cookie ça peut s'effacer ou se modifier mais ça prend un peu plus de temps que de fermer/ouvrir son navigateur (surtout si on ne veux pas effacer tous les cookies d'un coup).

A moins qu'il y ait beaucoup de millions à gagner (auquel cas donnes moi l'adresse de ton jeu :lol:) ça peut suffire pour décourager certains à ne pas contourner ton système de contrôle.

Cela dit si ton jeu est juste une simulation qui dure le temps d'une session, la variable de session est la voix royale et suffisante.