IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Vérifier provenance d'un _POST


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Vérifier provenance d'un _POST
    Bonjour

    Sur une première page, jeu.php, j'ai un formulaire qui récupère le score avec id='score' d'un joueur. Si le joueur enregistrer son score, celui-ci est envoyé à une deuxième page, enregisterScore.php, pour être rentré dans ma base de donnée.

    Toutefois, je souhaite vérifier que le score soit effectivement le bon, c'est-à-dire qu'il provienne bien du jeu et non pas d'un autre formulaire qui aurait envoyer à ma page enregistrerScore un score entré manuellement avec un même nom pour le champ d'input.

    Voici mon code sur score.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <form method="post" action="enregistrerScore.php">
    	<table>
    		<?php		
    			$pseudo = $_SESSION['pseudo'];
    			$mdp = $_SESSION['mdp'];		
     
    			if($pseudo || $mdp) { //compte existe
     
    			}else {
     
    				echo"<tr><th>Pseudo</th>";
    				echo"<th> <input type='text' class='style_input' name='pseudo' /><br/></th></tr>";	
    				echo"<tr><th>Mot de passe</th>";
    				echo"<th> <input type='password' class='style_input' name='mdp'/><br/</th</tr>";			
    			}
     
    			echo "<tr><th>Score</th>";
    			echo "<th> <input type='text' class='style_input' name='score' id='score' readonly /><br/></th></tr>";
     
    		?>					
    	</table>
     
    	<br><input type="submit" value="Enregistrer"/>
    </form>
    Existe-t-il une solution ou faut-il envoyer le score différemment ?

    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Bonjour,

    Tu peux rajouter un champ hidden avec l'ID du jeu ou l'identifiant de session par exemple

    Si tu envoies l'id de session, ça te permet de vérifier que l'utilisateur est bien connecté.

    C'est une piste ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    En regardant le code source de la page, l'utilisateur pourra alors récupérer cet id et ajouter un input dans son formulaire externe au site avec le même nom que le mien et en y entrant l'id. Donc finalement ça ne changerait rien ou alors est-ce moi qui ai mal compris ta proposition ?

  4. #4
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    A ce moment là, tu ne fais pas de formulaire mais tu affiches la page avec le score , tu l'enregistres en même temps dans la session du joueur, et tu rajoutes un lien sur un bouton pour enregistrer le score

    Lorsque le joueur arrive sur l'autre page, ton script récupère le score dans la session et l'envoie vers ta BDD.

    En même temps, tu supprimes le score de la session pour qu'il ne renvoit pas le score plusieurs fois ou tu le rediriges vers une autre page (+ fiable).

    Bien sûr, au cas où, ton script vérifie que la variable de session "score" n'est pas vide

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Mais pour enregistrer le score dans une variable SESSION, je dois forcément passer par un formulaire non ? Et donc on se retrouver avec le problème initial.

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Ça dépend.
    Comment remplis-tu l'input "score" dans le cas présent ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    La seule solution que je connaisse pour transférer du js dans une variable php est dans une première page avec le js :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("score").value = score;

    et le html:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="post" action="enregistrerScore.php">
    <input type='text' class='style_input' name='score' id='score' readonly />
    <br><input type="submit" value="Enregistrer"/>
    </form>

    Et une deuxième page qui récupère ça avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dernier_score = $_POST['score'];

  8. #8
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    En JS c'est chaud du coup.

    Mais au moment ou tu appelles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("score").value = parseInt(compteur);
    C'est à dire, sans doute à la fin du jeu, ne peux tu pas plutôt rediriger l'utilisateur vers une page qui afficherait le résultat (en envoyant le score en paramètre dans l'url)?

    Comme ça, lorsque la nouvelle page s'affiche, tu en profites pour enregistrer le score dans la session et tu lui affiches un bouton pour lui proposer de l'enregistrer (comme je te proposais plus haut)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Le problème c'est que l'utilisateur à juste à savoir avec quel nom de variable j'envoie mon score sur une deuxième page pour qu'il puisse faire de même depuis une page externe où il manipulerait manuellement la valeur du score. Et ce nom de variable, puisque le js est exécuté côté client, il peut le récupérer avec le code source.

  10. #10
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Oui, mais non,

    Car tu le chiffres avant de l'envoyer (doit bien y avoir ça en JS) et de plus, si ensuite tu l'envoies à la BDD, tu vide la variable de session.

    Même si le gars récupère le score codé, au pire il risque de renvoyer le même score.

    Si il tente de modifier le score chiffré, comme tu ne pourras pas le déchiffrer = ce ne sera pas un score, donc tu ne l'enregistre pas à nouveau.

    Bon, c'est un peu tordu, hein, mais comme je ne sais pas comment ton système fonctionne, je te propose des trucs que j'essaierai. Mais ça peut être naze aussi

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2011
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    J'envoie une variable chiffrée: OK
    Mais je la déchiffre comment de l'autre côté ?
    Le type de son côté peut envoyé lui aussi une variable avec le même type de chiffrage et mon php va le déchiffrer comme si ça venait du site non ?

  12. #12
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Points : 5 673
    Points
    5 673
    Par défaut
    Il y a par exemple la librairie jCryption :http://www.jcryption.org/
    Tu peux chiffrer/déchiffrer (je n'ai pas testé)

    En plus du score, tu pourrais aussi envoyer un code aléatoire généré en PHP et que tu stockes également au début du jeu dans la session.

    A l'arrivée, tu déchiffres le score + la "clé aléatoire"
    Tu vérifies qu'elle corresponde bien à celle stockée dans la session
    Et surtout, tu la détruit une fois que le score est sauvegardé pour ne pas qu'elle soit réutilisée.

    Si le gars se crée un form et utilise également le même chiffrement, il n'aura pas la clé stockée dans la session

Discussions similaires

  1. vérifier la valeur d'un $_POST dans une condition
    Par monlou dans le forum Langage
    Réponses: 3
    Dernier message: 13/07/2010, 17h29
  2. Comment vérifier la provenance?
    Par takinelinfo dans le forum Langage
    Réponses: 10
    Dernier message: 25/05/2009, 10h38
  3. Provenance des variables $_POST
    Par Linio dans le forum Langage
    Réponses: 5
    Dernier message: 23/10/2007, 20h48
  4. Vérifier la provenance d'un client
    Par furtif1 dans le forum Langage
    Réponses: 8
    Dernier message: 15/06/2007, 00h37
  5. Vérifier si les $_POST sont null ou pas
    Par furtif1 dans le forum Langage
    Réponses: 5
    Dernier message: 08/04/2007, 13h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo