05-02-2008, 03:12 AM
Zamentur a écrit :Ah çà me rappelle une faille de la beta de ragol-online, elle permettait de la même manière d'avancer de plusieurs cases sans avoir les point de mouvement requis.Ca me fait penser a mon compteur de connecté.
La solution mise en place était de retirer les points avant tout autre chose. Donc là lancer le delete avant le reste. Le problème c'est que réduire les chances de réussites d'une tel attaque.
C'est un script tout bête:
Si l'IP n'est pas dans la table, on l'ajoute, sinon on met à jour le timestamp qui correspond.
Et pourtant, environ 2 à 3 fois par semaine, j'ai une erreur sql "duplicate entry" venant du script!
C'est quelque chose qui ne cesse de m'étonner, car c'est pas une action ultra courante d'ajouter une IP au compteur, et il n'y as casi aucun code entre le select qui determine si l'IP est dans la base, et le INSERT qui l'ajoute.
Je sais pas trop comment ca se produit, déjà faut croire que certain lance 2 fois mon site d'un coup... Enfin mystère...
Quoiqu'il en soit, ca remet pas mal de principe de conception en cause :/
Zamentur a écrit :Sachant que ce genre d'erreur de construction peut se trouver n'importe ou empêcher l'ouverture de page avec des intervalles semble une bonne solution (meilleur que tout se retaper)J'ai bien la solution de mettre une variable session "en_cours".
Sinon une autre solution serait d'utiliser une variable session "en_cour" qui serait mise à true au début de chaque script et remise à false à la fin. De cette façon on sait qu'il n'y a pas d'autre demande en même temps.
De la sorte, si on execute un script et que "en_cours"==true, on pourrait faire un sleep d'1 seconde. Logiquement, la fonction Sleep devrait libérer le processeur et lui permette d'aller bosser ailleur, ce qui ferat avancer le script en cours.
Et si le script n'est toujours pas terminé au bout de la seconde, on relance le sleep...
Une question que je me pose, c'est comment est fait le sleep en PHP? Est-ce un bête while(1) jusqu'a ce que le temps soit écoulé, ou est-ce qu'il donne bien la main à d'autres processus....
Autre problème: Est-on certain de ne pas avoir de problème d'accés concurrent avec les session comme on a avec la base de données?
"L’avenir ne peut être prédit mais les avenirs peuvent être inventés"
Denis Gabor.
Denis Gabor.