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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    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 ?

  2. #2
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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
    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 éprouvé
    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
    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.

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

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 669
    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 éprouvé
    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
    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 ?

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 669
    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)

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