Page 1 sur 2

organisation du code et sécurité sur les variables postées

Posté : 15 juil. 2015, 09:57
par donkeykick
Bonjour,

Je cherche le meilleur moyen pour empêcher, interdire le "repost" de mes formulaires. Si on fait précédent suivant le navigateur demande de recharger la page. On peut pas empêcher cette page déjà ?

D'autre part que conseillez-vous en terme d'organisation de codes quand il y a plusieurs appels php et éléments jquery.

D'avance merci !

Ps : quand je poste un message sur phpfrance et que je fais F5 ou autre je ne sais pas cet effet, j'aimerai le même comportement ou savoir comment faire.

Re: organisation du code et sécurité sur les variables postées

Posté : 15 juil. 2015, 10:48
par ynx
Salut,

Pour éviter le rechargement du formulaire tu peux utiliser le principe https://fr.wikibooks.org/wiki/Patrons_d ... direct-Get, il s'agit simplement d'effectuer une redirection à la fin du traitement de ton formulaire.

Bonne journée

Re: organisation du code et sécurité sur les variables postées

Posté : 15 juil. 2015, 11:12
par donkeykick
Slt ynx,

2 choses me viennent à l'esprit. Comment faire quand tu n'as pas de message de confirmation.

Dans mon cas je gère le résultat via des messages sexy en jquery le tout dans la même page. Je teste si telle ou telle valeur est postée...

Dans le cas où j'ai une page de redirection. Qu'est-ce qu'il se passe si je remonte 2 fois (2 clics) dans ma navigation via le bouton précédent ?

Comment c'est géré sur phpfrance ? Ex : quand tu postes une réponse à mon message en faisant suivant précédent tu n'as pas ce phénomène.

Autrement comment gères-tu l'organisation de ton code ? C'est vite le bordel avec toutes ces instanciations jquery :-k

do_ok

Re: organisation du code et sécurité sur les variables postées

Posté : 15 juil. 2015, 11:57
par ynx
Concernant le message de confirmation, je ne comprend pas bien ta façon de faire. Le test des valeurs postées est bien fait en php ?

Voici un exemple simple que tu pourras tester (fichier test.php) :
<?php 
if (!empty($_POST)) { // si le formulaire est posté
	// on traite les données du formulaire (vérification, enregisrement bdd...)
	
	// à la fin du traitement, on redirige en get vers la même page avec un paramètre success
	header('Location: test.php?success');
	exit();
}

if (isset($_GET['success'])) { // si la redirection get avec le paramètre success est effectuée
	echo 'Formulaire posté'; // on affiche le message de confirmation
}
?>
<form action="test.php" method="post">
	<input type="text" name="exemple">
	<input type="submit" value="Envoyer">
</form>
Pour l'exemple tout est géré sur la même page (ce qui n'est pas forcément l'idéal). L'affichage du message de confirmation pourrait très bien être remplacé par l'affichage d'un script js (si cela répond à ta première question).

Tu ne pourras remonter 2 fois avec "Page précédente" puisque du point de vue utilisateur tu n'as fait qu'une seule requête en validant le formulaire.

Concernant l'organisation du code je n'ai pas de méthode universelle. Commencer par externaliser tous tes scripts dans des fichiers .js me semble un bon début. Tu peux ensuite soit utiliser un seul gros fichier .js qui contiendra tout ton code javascript que tu chargeras sur toutes tes pages, ou segmenter tes scripts dans plusieurs fichiers .js et les appeler au cas par cas sur chaque page.

Re: organisation du code et sécurité sur les variables postées

Posté : 16 juil. 2015, 09:47
par donkeykick
Bjr,

Oui je teste bien les valeurs en php et comme mon message est "sexy", j'y intègre du jquery. Du coup je peux pas mettre mon traitement tout en haut de ma page mais au sein même de mon <body>.

Je vais tester cela.

Merci !

Re: organisation du code et sécurité sur les variables postées

Posté : 16 juil. 2015, 14:27
par ynx
Le traitement de ton formulaire et la redirection doivent effectivement être fait dès le début de ton script (ou sur une autre page), avant d'envoyer le moindre contenu au client (contrainte de la fonction header() pour modifier les entêtes http).

Néanmoins l'affichage du message de confirmation peut être fait n'importe où dans ta page. En reprenant l'exemple :
<?php 
if (!empty($_POST)) { // si le formulaire est posté
  // on traite les données du formulaire (vérification, enregisrement bdd...)
  
  // à la fin du traitement, on redirige en get vers la même page avec un paramètre success
  header('Location: test.php?success');
  exit();
}
?>
<form action="test.php" method="post">
  <input type="text" name="exemple">
  <input type="submit" value="Envoyer">
</form>
<?php
if (isset($_GET['success'])) { // si la redirection get avec le paramètre success est effectuée
  echo '<div class="sexy">Mon message sexy</div>'; // on affiche le message de confirmation
  echo '<script>animation javascript de mon message ...</script>'
}
?>

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 11:08
par donkeykick
Salut ynx,

Ok mais tu fais comment dans le cadre d'une inscription ? Dans mon cas ce bouton est dispo partout donc potentiellement il faut que le header location soit la même page.

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 11:27
par ynx
Tu peux rediriger sur la même page en utilisant la variable globale $_SERVER, par exemple :
header('Location: ' . $_SERVER['REQUEST_URI']);
exit();

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 11:44
par donkeykick
Oui mais avec le exit en haut de page ça va pas couper le flux de ma page ?

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 11:51
par ynx
Le but de la redirection est justement d’arrêter le flux de la page pour en renvoyer un autre.

Si le traitement de ton formulaire est fait sur la même page, il n'y a plus besoin de redirection mais dans ce cas tu reviens au problème initial : le repost du formulaire.

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 12:04
par donkeykick
Ok mais dans le cadre de 2 clics en arrière pour les acharnés des boutons suivant précédent ? le problème va se poser aussi, non ?
Comment on contourne cela comme sur php france ? Quand je clique sur envoyer je peux revenir en arrière j'ai pas de demande de reposter mes valeurs postées. C'est géré comment ?

Re: organisation du code et sécurité sur les variables postées

Posté : 14 août 2015, 12:29
par ynx
Comme je l'ai déjà précisé :
Tu ne pourras remonter 2 fois avec "Page précédente" puisque du point de vue utilisateur tu n'as fait qu'une seule requête en validant le formulaire.
Je t'ai même donné un exemple très simple pour que tu puisses tester toi même.

Re: organisation du code et sécurité sur les variables postées

Posté : 16 août 2015, 00:23
par donkeykick
Saloute ! Oui parfait j'avais omis une info grrrr

Ok du coup on a pas besoin de mettre en plus un jeton de sécurité, si ? A vue de nez j'aurai tendance à dire non.... ?

do_ok

Re: organisation du code et sécurité sur les variables postées

Posté : 17 août 2015, 09:44
par ynx
Un token CSRF ?

Le principe POST-Redirect-GET n'as pas de rapport avec les attaques CSRF, donc oui le token est toujours nécessaire pour ce type d'attaque.

Re: organisation du code et sécurité sur les variables postées

Posté : 18 août 2015, 09:34
par donkeykick
Salut ynx, merci pour ton retour.

Je comprends pas bien, comment est-ce possible ?

Aurais-tu un exemple de tout ce que doit contenir un formulaire ou me donner les best pratices ^^ stp merci ?

do_ok