Vérifier la version client d'un utilisateur

Fermé
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - 30 sept. 2014 à 21:33
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 - 1 oct. 2014 à 19:14
Bonsoir, voilà mon problème:

Je dispose d'un script côté serveur ainsi qu'un script côté client. Je voudrais que mon serveur vérifie la version du client (j'entend par version, le script en totalité) pour que si le script coté client correspond à une copie valide côté serveur, la connexion est établie, si la version ne correspond pas, la connexion sera fermée et l'utilisateur ne pourra pas se connecter au serveur.
Le truc, c'est que si je vérifie les lignes de code du script, je dois lire le fichier client, sauf que l'utilisateur pourrait très bien envoyer une version valide tout en exécutant la version frauduleuse.
En clair:
Je dispose du côté serveur: Le script du serveur et la version valide du script côté client. Je voudrais comparer cette version qui est valide par rapport à celle de l'utilisateur côté client.

Alors voilà, comment vérifier si l'utilisateur n'a pas rajouté des lignes de script dans le programme côté client?

Pour info: J'utilise les sockets côté serveur/client et python 3.
Merci pour les réponses!
A voir également:

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
1 oct. 2014 à 14:30
'lut
Alors voilà, comment vérifier si l'utilisateur n'a pas rajouté des lignes de script dans le programme côté client?
Bah tout simplement, tu ne peux pas.
Et tu sais pourquoi, vu que tu as évoqué la possibilité d'envoi d'un script correct mais l'utilisation d'un modifié. Du moment qu'on peut modifier la source (qu'elle soit lisible ou compilée d'ailleurs) (et c'est à dire tout le temps), on peut modifier le comportement du script tout en le faisant imiter à la perfection l'original.

De toute façon, en quoi cela te dérange-t-il qu'on modifie le script?
0
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 24
1 oct. 2014 à 16:03
Et bien je fais une sorte de jeu en réseau (un jeu de pong). On pourrait par exemple modifier la taille de la raquette pour tricher.

En fait, je fais aucune vérification du côté serveur sur la partie de pong, c'est pourquoi on peut facilement tricher. J'enregistre juste la position de la balle et des 2 raquettes des joueurs.

D'ailleurs j'avais penser à faire ceci pour la vérification d'un script:
Le client se connecte sur le serveur, il envoie le fichier de son client pour que le serveur le vérifie, si il est pareil que celui du serveur c'est bon, sinon il est deconnecté.

Il me faudrait un truc du genre:
emplacementfichier = ???
fichierclient = open(emplacementfichier, "r").read()
connexion.send(fichierclient.encode("utf-8"))


Les ??? représenterais l'emplacement du script exécuté. Du coup, en python, est-ce possible de savoir l'endroit du programme .py qui est executé?

Merci!
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
1 oct. 2014 à 18:11
est-ce possible de savoir l'endroit du programme .py qui est executé?
os.path.realpath(__file__)
, mais ça peut ne pas marcher dans certains cas (spécifiques, par ex. avec Py2Exe).

je fais aucune vérification du côté serveur
Et tu devrais, car si tu veux forcer quelque chose (ici la taille de la raquette), il faut que ça soit géré coté serveur. Il ne faut jamais faire confiance au client, il est la pour faire interface avec l'humain qui joue, mais ça peut être toute autre chose comme un bot qui joue tout seul (semi-légitime) ou un client avec une option de triche.
Dans ce cas d'un jeu de pong, je dirais que la seule chose que le client doit envoyer au serveur, c'est la position de sa raquette (qui sera vérifiée par le serveur), et le serveur ne renvoie que la position de la balle, de ta raquette (! décalage réseau a prendre en compte !) et celle de l'adversaire.
De son coté, le serveur gère la simulation de la balle, et c'est lui qui gère selon la taille de la raquette, qui est fixe.
0
MickaToast Messages postés 142 Date d'inscription mercredi 19 février 2014 Statut Membre Dernière intervention 23 juillet 2015 24
1 oct. 2014 à 19:14
Justement, pour le décalage réseau je pensais à faire le jeu de pong sur le client, comme ça il y aura aucun "lag" pour la balle et la raquette (sauf celle de l'adversaire).

Du coup le serveur doit gérer le déplacement de la balle et les raquettes? Ou juste la balle?
0