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 :

[Sécurité] Effacer une variable après insertion ?


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut [Sécurité] Effacer une variable après insertion ?
    Bonjour

    Bon voilà, quand un visiteur valide le formulaire d'inscription il est expédié sur une page qui insère les données dans la base.
    Si le troufion a l'idée de faire retour avec le navigateur et revalide en moins de 20 sec il est bloqué.
    Au lieu de revalider il peut choisir de modifier les informations du formulaire qu'il venait de remplir et qui se réaffichent automatiquement puisque conservées par le cache du navigateur.
    Là il est stoppé parce qu'il y a désormais un doublon.
    Par contre dans ce cas de figure, les mots de passes sont conservés.
    Si le gars change le pseudo et l'email et revalide il va créer un nouveau compte avec un passe identique au précédent, sans même avoir eu à le réécrire.

    Ce n'est pas normal, surtout que dans ce cas de figure il n'a pas revalidé les conditions d'utilisation.
    Le cas ne devrait pas se produire, mais c'est tout de même à corriger.


    Vous avez tout compris hein ?
    Donc, puis-je effacer les champs des formulaires (hidden) qui recontiennent automatiquement les valeurs du formulaire qui vient d'être validé, si jamais on fait retour avec le navigateur ?
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    le plus simple c'est de faire une seule page post.php, et dedans tu mets des headers.

    je m'explique :
    - tu es sur la page post.php, et tu clique sur envoyer
    - des variables de $_POST sont envoyées à post.php
    - le script les traitent et après fait un header (redirection) sur post.php

    moralité : le client ne voit rien, et si il fait précédent retour ou actualiser les variables $_POST ont disparues.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Mon problème :

    Le gars est sur la page de formulaire A. Il valide.
    Il arrive sur la page d'insertion B qui envoit les données dans la base.
    Ici, si il fait retour il se retrouve sur A et si il revalide, revient sur B qui réexpédie tout dans la base, ce qui est mon problème.

    Donc tu proposes :
    Le gars est sur la page de formulaire A. Il valide.
    Il arrive sur la page d'insertion B qui envoit les données dans la base.
    Là un header recharge B au bout d'une seconde.
    Du même coup les données ont disparu.
    Le gars peut toujours faire retour, il ne se passe rien.

    J'ai bon?
    Mais pourtant les données du formulaire seront toujours présente dans le cache et vont remplir directement les champs du formulaire, il me semble.

    On m'a conseillé de tester le referer : si il correspond à la page B, je vide le formulaire en initialisant les values avec ' ' .
    C'est bon ça ?



    J'essaierai bien tout de suite mais j'ai mon bain qui coule. Je reviens vous dire si ça fonctionne dès que j'ai essayé, merci.
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Peut être que tu peux regarder du coté de REPLACE INTO au lieu de INSERT INTO.

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    petite correction à ce que tu propose :
    Citation Envoyé par psychoBob
    Il arrive sur la page d'insertion B qui envoit les données dans la base.
    Là un header recharge B au bout d'une seconde.
    une fois que les données sont inserées, je te conseille d'utiliser le code suivant pour rediriger vers une page "message.php" qui affichera par exemple "Vos données ont bien été enregistrées"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: message.php');

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci pour vos réponses.Avant de voir, pour le header, j'ai essayé cela :


    Le visiteur valide un formulaire et arrive sur la page qui confirme l'enregistrement. Cette page insère les données dans la base.
    Après le script d'insertion j'initialise une variable de session comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['antiMarcheArriere']='1';
    Le but est que si le gars utilise fait un retour avec le navigateur, la page précédente n'affiche plus le formulaire tel qu'il était mais les conditions d'inscription.

    Pour cela je fais comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if($_SESSION[$antiMarcheArriere]!=1) 
    { 
    on insère le formulaire 
    ;} 
    else {require('condition-inscription.php');}
    Et bien avec ça le formulaire se réinsère quand même. Si je fais
    !isset($_SESSION[$antiMarcheArriere])
    Pour le test, alors c'est pareil.




    Donc ? Pourquoi ma variable de session n'est pas transmise à la page précédente lorsque l'on fait un retour du navigateur ?
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par psychoBob
    Donc ? Pourquoi ma variable de session n'est pas transmise à la page précédente lorsque l'on fait un retour du navigateur ?
    tu t'es surement trompé dans ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SESSION[$antiMarcheArriere]!=1)
    à remplacer par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SESSION['antiMarcheArriere']!=1)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Bon alors en effet il y avait cette erreur

    Je viens donc de la corriger et c'est bizarre, maintenant si je fais un retour depuis la page d'insertion, au lieu d'avoir le script de confirmation des CGU qui s'affiche (si tout se passait bien), ou comme avant le script de confirmation qui pose problème, maintenant j'obtiens une erreur du navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Avertissement : expiration du délai pour cette page 
    La page requise a été créée en utilisant 
    les informations fournies dans un formulaire. 
    Cette page n'est plus disponible. 
    Par sécurité, Internet Explorer ne renvoie pas automatiquement les informations vous concernant. 
     
    Pour envoyer vos informations à nouveau et afficher cette page Web, cliquez sur le bouton Actualiser.
    ça vous parle ?
    C'est pas parce que j'ai tort que vous avez raison.

Discussions similaires

  1. Réponses: 21
    Dernier message: 30/03/2007, 15h21
  2. Réponses: 6
    Dernier message: 23/01/2007, 16h57
  3. Sécurité sur une base après avoir suivi le tutoriel
    Par laurent.w dans le forum Sécurité
    Réponses: 1
    Dernier message: 16/01/2007, 19h05
  4. Affichage d'une image après insertion dans une base
    Par leloup84 dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 16h34
  5. Réponses: 2
    Dernier message: 23/10/2005, 18h05

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