Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/04/2006, 11h17   #1
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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 ?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 11h29   #2
Expert Confirmé
 
Avatar de Maxoo
 
Maxime Pasquier
Expert PHP
Inscription : novembre 2004
Messages : 2 126
Détails du profil
Informations personnelles :
Nom : Maxime Pasquier
Âge : 28
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 126
Points : 2 602
Points : 2 602
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.
__________________
Pour une bien meilleur lisibilité, utilisez la balise [code], c'est le [#] dans votre éditeur.
Mon espace Développez : mes Créations.


Rencontre & Carte des Membres de Developpez.com, version 3.0
Maxoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 11h42   #3
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 21h09   #4
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Peut être que tu peux regarder du coté de REPLACE INTO au lieu de INSERT INTO.
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 22h06   #5
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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 :
header('Location: message.php');
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 22h27   #6
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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 :
$_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 :
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 ?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 22h55   #7
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
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 :
if($_SESSION[$antiMarcheArriere]!=1)
à remplacer par ça :
Code :
if($_SESSION['antiMarcheArriere']!=1)
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2006, 23h34   #8
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
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 :
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 ?
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h59.


 
 
 
 
Partenaires

Hébergement Web