Page 1 sur 4
possible d'ouvrir une page qu'une fois par connection
Posté : 29 août 2007, 20:46
par solodown
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
Posté : 29 août 2007, 23:37
par AB
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).
Posté : 30 août 2007, 09:49
par orgerix
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.
Posté : 30 août 2007, 10:18
par cf357
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...
Posté : 30 août 2007, 12:49
par solodown
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 ?
Posté : 30 août 2007, 12:56
par cf357
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);
}

Posté : 30 août 2007, 20:45
par AB
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
Posté : 30 août 2007, 20:58
par cf357
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
Posté : 30 août 2007, 21:11
par AB
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

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.
Posté : 30 août 2007, 21:14
par Sékiltoyai
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
… :-/
Posté : 30 août 2007, 21:34
par AB
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
(mais peut-être tu n'as pas lu le topic depuis le début)
Posté : 30 août 2007, 21:41
par cf357
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 !
Posté : 30 août 2007, 22:26
par AB
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

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

) 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).
Posté : 30 août 2007, 22:27
par solodown
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
Posté : 30 août 2007, 23:11
par AB
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

) ç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.