Ce problème un peu spécial est dû au besoin de sécuriser un jeu javascript (Lire ce topic pour en savoir plus.)
Suite à cet ancien topic j'utilise toujours la même sécurité qui reste contournable même si elle est chiante (le tricheur doit à chaque fois reprendre le nouvel id).
J'ai réfléchi à quelque chose : mettre un champ à 1 grâce à un update en php dans une partie javascript du jeu où la collision est détectée, ainsi je suis sûr qu'on ne peut plus tricher, j'ai donc essayé ça sur jeu.php :
if (touch == 1) { // partie js où la collision a été détectée
stop(); reset();
<?php mysql_query("UPDATE joueurs SET joueur_verif='1' WHERE joueur_pseudo='".$_COOKIE['auth']."'"); ?> // mise à jour d'un champ joueur_verif
}
Donc si le tricheur veut mettre un temps en l'entrant dans l'url ce sera refusé car le champ ne sera pas à 1 vu qu'il n'aura pas véritablement joué et donc pas cogné.
Cependant j'ai testé cette méthode et elle ne fonctionne pas, j'ai juste à actualiser la page jeu.php et le champ se met à 1 sans même devoir jouer et donc cogner.
L'instruction php d'update est exécutée même si la condition js n'est pas respectée..
Que dois-je faire pour enfin réussir à protéger mon jeu de manière efficace ? Si possible une solution simple (je n'ai pas comprise celle proposée sur l'ancien topic).
Oui mais on pourra tricher, il suffira que l'utilisateur se rende sur la page pour enclencher la requête non ? Comment cacher le fichier du coup, sachant que certains outils permettent de fouiller un site ?
Hum, ce que je te conseille de faire, c'est de mettre un token après chaque action ajax.
En gros, dès que tu fais une requête ajax, tu appelles un minuscule fichier qui te renverra un token et qui le mettra en session. Ainsi, on ne pourra pas deviner ton token. Après, tu le transmet à la prochaine requête ajax, et tu vérifies si la variable transmise est bien celle en session.
Ah mais un token c'est un nombre généré aléatoirement avec rand en php que je hash ensuite ?
Pourrais-tu me présenter un exemple de code stp, car je ne vois pas trop la façon dont je pourrais m'y prendre.
// Cette variable est déclarée dès la première ligne de js :
var TOKEN;
// Cette fonction est déclarée dans un fichier js à part
function newToken() {
$.ajax({
url: "gentok.php",
dataType: "json",
async: false,
success: function(r) { TOKEN = r[0]; }
});
}
// Dans mon <head>, j'appelle newToken(), et après chaque requête ajax également.
// Je transmet aussi la valeur du token :
$.ajax({data: ({token: TOKEN, ...}),
...
complete: function() { newToken(); }
});
<?php
if ($_SESSION['token'] !== $_POST['token']) // POST ou GET, ça dépend de ton cas
// ...
Oula, en fait je ne sais pas ce que c'est JQuery, enfin j'ai déjà vu, on ne peut pas faire tout ça juste avec du js normal et du php ? Car là je ne sais pas où placer ces bouts de code.
JQuery c'est juste un framework js. J'ai jamais vraiment appris le js, donc bon, je saurais pas t'en dire plus.
J'pense qu'il faut utiliser onreadystatechange de ton objet XHR.
Dans une requête ajax JQuery, les paramètres que j'ai mis correspondent à :
url : l'url de la page à appeler
datatype : le type des données que la requête te renvoit
data : les requêtes à envoyer (en GET ou POST)
async : passé à false, la requête sera synchrone
success : quand la requête a réussi
complete : quand la requête est terminée (réussite ou échec)
Donc, comme je te disais, non, ça ne marchera pas.
Utilise les requêtes ajax comme tu as l'habitude de faire, ça ne sert à rien de faire un affreux mélange avec jquery.
Dans ton onreadystatechange, quand tu sais que la requête a été exécutée, tu appelles ta fonction qui génère un nouveau token.
Refais toi-même cette fonction avec tes habitudes, ça sert à rien de reprendre mon code comme ça
Ok merci.
Donc par exemple dans la partie où je détecte la collision avec le js j'appelle control.php chargée de mettre à jour un champ sql à 1 et justement on ne doit pas pouvoir le mettre à jour juste en allant sur cette page, il faut vraiment cogner :
if (touch == 1) {
stop(); reset();
var xhr=null;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("GET", "control.php", false);
xhr.send(null);
}
On dirait que tu sais pas ce que tu fais. Tu te contente de copier bêtement les morceaux de code que je te donne, sans même savoir ce que ça fait. Revois ton cours, parce que là tu fais n'importe quoi :/
Bah c'est pas revoir c'est apprendre, je n'ai jamais touché à ça, je m'occupe du PHP et je n'ai jamais réussi à régler ce problème pour la triche.
Il manque quoi pour que ce soit bon là ?
Tu peux pas lire ce tuto en 10 minutes -.-
Bon, je quitte ce sujet j'en ai marre. T'as tout ce qu'il te faut dedans, lis bien et tu pourras faire c'que tu souhaites.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr
Jeu du carré rouge modifié, quel niveau atteindrez-vous ? http://squared.go.yj.fr