JeuWeb - Crée ton jeu par navigateur
[AJAX] Sécurité de la transmission des données - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [AJAX] Sécurité de la transmission des données (/showthread.php?tid=4672)

Pages : 1 2


[AJAX] Sécurité de la transmission des données - Blub - 25-03-2010

Bonjour,

je me pose de grosses questions de sécurité pour la transmission de données de page en page.

Mon système fonctionne de la façon suivante :
1. Chargement asynchrone de module.php?m=profil&r=chargement
Ce fichier contient :
Code :
<?xml version="1.0" encoding="iso-8859-1"?>
<module>
<xml>jeu/module/profil.module.php?r=chargement</xml>
<nom>Profil</nom>
<xsl>jeu/xsl/profil.xsl</xsl>
</module>

2. A partir de ce fichier, une fonction javascript charge de façon asynchrone jeu/module/profil.module.php?r=chargement
(Ce fichier contient du XML qui est combiné au XSL de jeu/xsl/profil.xsl.)

Le problème, c'est que si quelqu'un entre jeu/module/profil.module.php?r=chargement directement dans son navigateur, le fichier php va s'exécuter et va faire des actions qu'il ne devrait peut-être pas faire...

Pire : j'aimerais pouvoir passer beaucoup plus d'informations, j'avais imaginé les mettre toutes dans l'url :
chargement de module.php?m=profil&r=chargement&truc=bidule&autretruc=valeur.
Ce fichier contiendrait :
Code :
<?xml version="1.0" encoding="iso-8859-1"?>
<module>
<xml>jeu/module/profil.module.php?r=chargement&truc=bidule&autretruc=valeur</xml>
<nom>Profil</nom>
<xsl>jeu/xsl/profil.xsl</xsl>
</module>
Puis on chargerait jeu/module/profil.module.php?r=chargement&truc=bidule&autretruc=valeur.

Je vois bien que c'est pas sûr du tout, n'importe qui peut ouvrir directement n'importe quel fichier en mettant n'importe quelle valeur aux paramètres GET...
Je devine qu'il faut repenser (radicalement ?) le système, mais je ne vois pas comment faire pour arriver à un résultat flexible (possibilité de passer plein de données entre les pages) et sécurisé.

J'en appelle donc à votre expérience pour trouver des pistes de réflexion !
Merci.


RE: [AJAX] Sécurité de la transmission des données - Ono - 25-03-2010

Je ne suis pas un expert mais comme je suis là tout de suite je tente un début de réponse. Effectivement, tout joueur peut appeler l'adresse qu'il veut et passer les paramètres qu'il veut. C'est un peu comme s'il jouait en ligne de commande, c'est pas anormal. C'est ton serveur qui doit déterminer si les actions demandées et les paramètres passés sont valides ou non.

Par exemple si tu laisses le client faire les calculs et passer un paramètre "&or=500", qui aurait pour effet de mettre le stock d'or du joueur à 500 sans aucune vérification, alors là ce n'est effectivement pas sécurisé.
Par contre, si tu passes un paramètre "&mode=retirerbanque&or=500", là c'est valide, car tu demandes au serveur de retirer de l'or de la banque et tu lui donnes le montant souhaité. C'est alors à ton script php de vérifier que le joueur en question a bien 500 or sur son compte. Dans le cas contraire, soit il refuse le retrait, soit il retire ce qu'il peut.
Comme d'hab: "Ne jamais faire confiance au client".
Peut-être que tu devrais préciser un peu ce que permet ton code, et pour les autres, merci de me corriger si j'ai dit des âneries.


RE: [AJAX] Sécurité de la transmission des données - keke - 25-03-2010

comme ta fonction doit vérifier que tu ne peux pas retirer un nombre négatif de pièce d'or ...

retirer un nombre négatif revant à ajouter de l'or ...

kéké


RE: [AJAX] Sécurité de la transmission des données - My Hotel - 25-03-2010

Voilà, pour résumer tu dois tout vérifier en PHP, et accessoirement en JS pour offrir une meilleure expérience utilisateur. Mais le JS est contournable, le PHP non.

Bye


RE: [AJAX] Sécurité de la transmission des données - Ter Rowan - 25-03-2010

pareil que les autres si c'était bien cela la question...

Est ce que tu as peur du joueur qui triche

ou

Est ce que tu as peur qu'une tierce personne s'immisce entre ce que t'envoie le joueur et ton serveur ? (et donc tu cherches à cacher des informations à un éventuel espion)


RE: [AJAX] Sécurité de la transmission des données - My Hotel - 26-03-2010

Si tu ne veux pas qu'on puisse mettre n'importe quoi dans les paramètres GET tu peux aussi opter pour un système de cryptage réversible bien sur (donc pas sha1). Et la page appellée décode les données avant de les traiter, donc le joueur/hacker ne pourra normalement pas passer des données cryptées (vu qu'il n'a pas la clef) et donc problème résolu Wink

Bye


RE: [AJAX] Sécurité de la transmission des données - php_addict - 26-03-2010

salut

quel "système de cryptage réversible" lui conseillerais tu?


RE: [AJAX] Sécurité de la transmission des données - Blub - 26-03-2010

Merci à tous pour vos réponses,

j'avais pensé à vérifier que les paramètres GET correspondent à quelque chose que le joueur peut faire mais ça me semble difficile dans certains cas, et je préférerais empêcher toute action qui passerait directement par les modules en forçant le joueur à utiliser le système que j'ai prévu.

Vous pensez qu'il est possible (avec des variables de session ?) de s'assurer que le joueur vient de passer par module.php avant d'ouvrir profil.module.php ? Ça l'empêcherait d'ouvrir directement les fichiers exécutant des actions.

My Hotel : ça me semble très intéressant, tu peux détailler un peu ?

Edit : j'ai réfléchi un peu, il est évident que je suis dans tous les cas obligé de vérifier en PHP que le joueur a le droit de réaliser l'action.

Par contre pour l'empêcher d'ouvrir directement le fichier, j'ai pensé au système suivant :
module.php génère une chaîne aléatoire et la crypte avec une clé, on obtient donc un code. La clé et la chaîne de départ sont stockées en sessions.
L'appel de profil.module.php précise en GET le code obtenu. On utilise la clé (passée en session) pour décrypter le code et on vérifie si le résultat correspond bien à la chaîne de départ (passée en session aussi).

Ça semble empêcher une ouverture directe de profil.module.php, je me trompe ou ça vous semble sûr ? Je ne suis pas un pro de la sécurité des sessions.


RE: [AJAX] Sécurité de la transmission des données - Sephi-Chan - 26-03-2010

C'est le principe des jetons d'accès, et c'est ce qui devrait être utilisé pour toute action. Smile


Sephi-Chan


RE: [AJAX] Sécurité de la transmission des données - Blub - 26-03-2010

Ok donc je suis content d'y avoir pensé presque tout seul Smile

Merci à tous pour votre aide.