JeuWeb - Crée ton jeu par navigateur
Les sessions (sécurité, utilité, optimisation) - 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 : Les sessions (sécurité, utilité, optimisation) (/showthread.php?tid=2988)

Pages : 1 2 3 4 5 6 7


Les sessions (sécurité, utilité, optimisation) - Ter Rowan - 30-08-2008

Je commence à me pencher un peu sur l'utilisation des sessions et je me pose diverses questions...

Tout d'abord, un petit topo sur le contexte qui m'a poussé à lire deux trois articles sur ces sessions et finalement à me poser plus de questions encore...

Le personnage joueur est sur un site (prenons une forêt). Il a la faculté de fouiller cette forêt. Un personnage peut fouiller plusieurs fois la forêt avant de ne plus pouvoir le faire (consommation de points d action)

Dans différentes tables (et peut être un fichier de référence) j'ai la liste des choses qui peuvent être trouvées dans cette forêt.

Pour trouver une chose (ou plusieurs), le personnage doit réussir un jet. On considère donc qu'une fouille correspond à un jet croisé avec la liste des choses qui sont dans la forêt

Je m'imagine, pour optimiser un peu tout ça, qu'il suffit de faire les requêtes qui génèrent cette liste à la première fouille, de la stocker dans une variable de session, puis si de nouvelles fouilles apparaissent sur ce site, de lire la variable de session (on évite donc des appels mysql, des calculs, etc...)

Maintenant mes questions...


[Optimisation] Est ce que vous confirmer que ce système serait plus performant (rapidité, cpi, bdd, etc..) que relancer les requêtes à chaque fois ? (avec on va dire, beaucoup d'objets dans la bdd)

[Utilisation] Comment stocker une liste à travers les sessions ? On peut faire des tableaux de tableaux ? ou je stocke cela sous forme de chaine de caractères que j'interpréterai ?

[Sécurité] Evidemment je veux éviter que le petit malin sache s'il est intéressant ou pas de fouiller plusieurs fois le lieu où il se trouve. Or quand j ai cherché un article sur google sur sécurité + session, je me suis retrouvé avec un tutoriel qui mélange sessions + mysql, du coup je me pose la question de l'intérêt d'une session pour stocker ce type de données. Qu'en pensez vous ? (Et si quelqu un pouvait démarrer des tuto sur la sécurité, ce serait top Smile )

[Utilisation 2] Et pour finir la question qui m'a tué ce matin en me baladant. Supposons que le système que j'ai décrit plus haut soit pertinent... Comment faire si deux PJ soient connectés simultanément au même endroit : Au départ ils ont la même liste, chacun dans leur "variable de session ". Mais si le PJ A récupère la super épée plantée dans le sol, comment virer de la session du PJ B cette même épée ?
Je risque de me retrouver avec deux rois de Bretagne moi ... (de même dans l 'autre sens, un objet est déposé au sol en direct...)


merci de vos avis Smile


RE: Les sessions (sécurité, utilité, optimisation) - Studio Gamboo - 30-08-2008

Je te conseillerai plutôt d'utiliser un système de ram en mémoire comme memcache ou APC pour stocker ce genre de tableau.
Ca fonctionne exactement comme une session sauf que celle ci est commune à toutes les personnes utilisant le site.
Ainsi au lieu de faire un cache en session par joueur (donc une requête sql à chaque fois) tu ne fait plus qu'un seul cache général, renouvelé de temps en temps.
Et si quelqu'un prend la fameuse épée dans ce cache, elle ne sera plus disponible pour tout les autres joueurs Smile


RE: Les sessions (sécurité, utilité, optimisation) - Cartman34 - 30-08-2008

je pense que le mieux est quand même de mettre les objets importants sur la bdd, sinon il y aura obligatoirement des failles de sécurité si les informations importantes ne sont pas enregistrées (en dur)
Mais généralement quand on doit avoir un jet suffisant pour trouver un objet, ca se fait aléatoirement au moment de la fouille.
Sinon tes premiers joueurs vont avoir tous les objets et les derniers plus rien...
La consommation des points d'action doit obligatoirement s'enregistrer sur la bdd, bien que ej trouve ce genre de jeux très chiants....


RE: Les sessions (sécurité, utilité, optimisation) - phenix - 30-08-2008

Perso, je n'utilise les sessions que lorsque c'est vraiment indispensable, je préfère utiliser les informations de la base de donnée, car elle ne peuvent pas être manipulé par l'utilisateur.

J'ai même mit un système qui vérifie que le password en session est le même que celui de la base de donnée sur chaque page, au cas ou quelqu'un s'amuserait à trifouiller dans les sessions.

Bref, je ne leur accorde qu'un minimum de confiance, après tout ce sont des informations qui viennent de l'utilisateur... et il ne faut jamais faire confiance à l'utilisateur.


RE: Les sessions (sécurité, utilité, optimisation) - Sephi-Chan - 30-08-2008

Les sessions sont stockées sur le serveur et c'est le programme qui les enregistre. Ça ne vient donc pas de l'utilisateur et ne peut pas être manipulé par lui. C'est un endroit sûr (à ma connaissance).

Le seul risque (toujours à ma connaissance Smile), c'est l'usurpation de session. L'identifiant de session d'un utilisateur est souvent stockée dans un Cookie intitulé PHPSESSID. Parfois il passe dans l'URL sous forme de variable GET, il porte là aussi le nom de PHPSESSID.

Si un joueur A obtient le PHPSESSID d'un joueur B, il peut se faire passer pour lui sur le site (vu que c'est la session du joueur A qui est utilisée). Cela fait partie des attaques par CSRF (ou XSRF).

Quelques liens utiles :

Sephi-Chan


RE: Les sessions (sécurité, utilité, optimisation) - Ter Rowan - 30-08-2008

merci pour ces premiers retours

j ai regardé un peu memcache et apc (rapidement) c'est intéressant mais je crains d'avoir du mal à l'utiliser (on touche à l'install de logiciel et autre "exploit" ou je suis une bille totale) maintenant c'est une piste intéressante, d'autant plus en phase d'optimisation (je vais monter une classe qui me permettra éventuellement de basculer sur ce type d'outil si besoin d'optimisation)


concernant les sessions j ai cru comprendre qu outre l'usurpation , il y aurait possibilité sur un serveur partagé que toutes les applications php partagent le même {fichier ou je sais pas quoi} de session

du coup ça voudrait dire que toutes les applications du serveur pourraient manipuler les sessions du jeu

mais bon, c'est là où ce n est pas clair


RE: Les sessions (sécurité, utilité, optimisation) - Cartman34 - 31-08-2008

Sephi-Chan a écrit :Le seul risque (toujours à ma connaissance Smile), c'est l'usurpation de session. L'identifiant de session d'un utilisateur est souvent stockée dans un Cookie intitulé PHPSESSID. Parfois il passe dans l'URL sous forme de variable GET, il porte là aussi le nom de PHPSESSID.

La solution n'est pas nouvelle et est utilisée par de grands jeux/sites...
Il faut vérifier que les IPs correspondent.


RE: Les sessions (sécurité, utilité, optimisation) - Zamentur - 31-08-2008

une idée me vient...
Est il possible d'ouvrir une session en changeant le SESSID par exemple =1 afin de créer une session général?

De cette façon il serait possible en jonglant avec les sessid d'obtenir une session commune et une session perso...


RE: Les sessions (sécurité, utilité, optimisation) - Ter Rowan - 31-08-2008

Zamentur a écrit :une idée me vient...
Est il possible d'ouvrir une session en changeant le SESSID par exemple =1 afin de créer une session général?

De cette façon il serait possible en jonglant avec les sessid d'obtenir une session commune et une session perso...

pas con ça ! quelqu un aurait déjà essayé ?


RE: Les sessions (sécurité, utilité, optimisation) - Cartman34 - 31-08-2008

C'est théoriquement possible mais pas très utile en fait...
Quoi que, je pense qu'il y aurait des problèmes avec les cookies.
De toute façon, ce n'est pas une bonne solution.
Ce n'est pas fait pour ça et certains outils dispo eux sont fait pour ça.