Score Vérification Clée, hum.... !

Eléphant du PHP | 129 Messages

25 janv. 2011, 00:09

Bonsoir tous,

Depuis maintenant plusieurs mois je suis à créer mes petits jeux flash de bière, je suis souvent venu ici pour divers problème avec mes codes php et as, j'ai toujours eu des réponses, sa c'est le top ici :wink:

Avant de lancer mon petit site de jeu, je vous le dit de suite c'est pas un site de jeu pour gagner des truc, c'est juste pour le fun, y a rien a acheter, le but du jeu est de faire les meilleurs scores possible contre les autres joueurs et joueuses de bière !

Bref j'en suis rendu à la fin, mais je rencontre un énorme problème :cry:

La sécurisation des scores.... sniff snifff et re snifff

Déjà j'ai fait une première sécu :
------------------------------------------------------------------------------
Dans mon jeu flash, j'ai mis un mot qui est ensuite crypté en md5.

Au moment de l'envoie du score, je prend le mot + le score + le pseudo et je met tout cela en md5.

J'envoie ensuite dans mon php pour faire les vérifications.

Je reprend le score, le pseudo et ma clé de cryptage.

Je refait un cryptage du pseudo + le score et enfin je compare les deux, après plusieurs test cela fonctionne.
------------------------------------------------------------------------------

Mais voila, es-que cela est assez ?

Alors j'ai chercher un peu sur le net, et je suis tomber sur ce POST
Fladnag l'auteur du message, explique bien la solution, elle date de 2005 !

Mais en faite je comprend pas trop la façon de faire réellement.
---------------------------------------------------------------------------

* Une page charge le fichier flash
_______________________________
Ok pas de problème j'ai compris


* Lors de l'initialisation, le fichier flash va charger une page PHP qui va contenir des variables. Parmis celle ci, un identifiant unique qui identifiera "la session flash" et qui sera généré par php (avec un md5(time()) ou tout autre moyen que tu souhaite)
_______________________________
Ok la aussi pas de souci



* Lors de l'envoi du score, Flash renvoi cet identifiant dans la requete (ou bien crypte une donnée avec cette information, qui sert en sorte de "clé de cryptage"
_______________________________
Ok




La page PHP qui recoit le score peut maintenant faire les verifications suivantes parmi celles ci selon la technique employée :
* La clé de cryptage existe (il faudra penser a la sauvegarder dans une base de données auparavent)
* Si une clé de cryptage a été utilisée pour renvoyer un score, on peut supposer que c'est une tentative de piratage, donc annuler le score (voir annuler tout les scores du joueur si tu as un moyen de l'identifier ;o) : Cela suppose de changer de clé de cryptage a chaque "nouvelle partie", mais Flash peut tres bien en demander une a PHP n'importe quand, donc pas de probleme
_______________________________

Alors voila, la je comprend pas trop, mais carrément pas sniff lol
Avant d'envoyer le score, on vérifier que la clé existe dans la base de donnée, ok, mais pour la comparer à quoi ?

Surtout s'il on garde cette clé.

Voila je voulais vos lumières sur toute c'est question, savoir si ma première méthode est bonne et comprend la méthode de Fladnag, que je salut au passage s'il voie un jour ce post, merci mec :wink:

Merci à vous et bonne soirée.

Edit : Après recherche, j'ai lu que apparemment il faudrait plutôt utiliser le SHA1 que le MD5, hum encore un prob, le s'ils on créer le SHA1 c'est pour remplacer le MD5 ?

Merci de vos réponses.

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

25 janv. 2011, 04:22

salut,

je ne connais pas flash, mais
- sha1 VS MD5 c'est pas vraiment un combat, sur le principe c'est la même chose (un "hash") la différence et la taille de celui ci (32 caractères pour md5, 40 pour sha1) la différence est le nb de possibilités à traiter pour les dictionnaire ;)
- Pour la comparaison c'est la valeur en db créer lors de l'affichage du flash et la valeur fournis par le fichier flash lors de l'envoie des résultats (histoire d'être sur qu'il n'y a pas eu de bidouille).
- sur le principe de sécurisation il faut stocker (une table de sgbd ?) un couple clef / id joueur (si authentification) tu peut aussi utiliser une date pour donner une durée de validation d'une session (par exemple si le jeu dure plus de 10 minutes je prend pas en compte).

après faire un md5 sur le pseudo, je suis pas certain de l'utilité ;)

ce qu'il faut voir c'est :
- le but exact est de ne pas poster 280000 un scrore avec différent pseudo ? un couple clef + pseudo (+ date de péremption) devrait suffire
- y a t'il un espace membre "obligatoire" si oui c'est beaucoup plus simple à gérer :)
- l'importance de la chose dans ton système (pas besoin de la sécu de la nasa, mais minimum s'impose ;) ).

perso je ferais ce que indique :
1/ affichage de la page avec le swf auquel tu passe une clef (md5(time), uniqid ou ce que tu veut tant c'est unique) tu stock ça dans une table du sgbd avec la date ( donc la table serais id, clef, date, ajout "l'idpseudo" s'il y a un espace membre).
2/ lors de la validation du formulaire d'envoi de score par php tu récupère la clef et tu vérifie qu'elle existe dans la table (qui au final ne contiendra que des données volatiles) si oui tu insère le score dans ta table, sinon tu n'en tiens pas compte et affiche d'un message d'erreur).
3/ géré la péremption des données => un triggger qui fait "ramasse miette" lors que tu faite un insertion dans la table (before / after insert comme tu veut). Tu peut aussi le faire en php avec un delete de toute les données qui ont une date inférieure à now() -x minutes.


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

Eléphant du PHP | 129 Messages

25 janv. 2011, 14:51

Bonjour moogli,

Ok, j'ai pris note de tous cela est vais mettre en place, merci :wink:

Sinon oui j'ai fait un espace membre.