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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] organisation du code et sécurité sur les variables postées

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

par ynx » 03 nov. 2015, 13:29

Salut Donkeykick,

Effectivement l'utilisation d'une variable GET n'est pas forcément la meilleure idée. Tu peux utiliser une variable de session à la place : à la fin du traitement on affecte une variable en session pour confirmer l'envoie et on redirige. Sur la page redirigée, si la variable de session existe on affiche le message de confirmation et on supprime la variable de session pour ne pas re-afficher le message au prochain chargement.

Bon développement ;)

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

par donkeykick » 03 nov. 2015, 00:48

Hello,

J'avais une question ynx. Comment tu gères le message intempestif avec l'histoire du ?succes dans le GET car si je vais ensuite de cette page mapage.php?succes vers forum.phpfrance.com et que je reviens sur mapage.php je réaffiche mapage.php?succes et je me reprends dans la face le message sexy.
Tu vois ce que je veux dire ? Comment on peut gérer ça ?

Merci, ça roxe en tout cas :)

do_ok

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

par donkeykick » 18 août 2015, 09:34

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

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

par ynx » 17 août 2015, 09:44

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

par donkeykick » 16 août 2015, 00:23

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

par ynx » 14 août 2015, 12:29

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

par donkeykick » 14 août 2015, 12:04

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

par ynx » 14 août 2015, 11:51

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

par donkeykick » 14 août 2015, 11:44

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

par ynx » 14 août 2015, 11:27

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

par donkeykick » 14 août 2015, 11:08

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

par ynx » 16 juil. 2015, 14:27

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

par donkeykick » 16 juil. 2015, 09:47

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

par ynx » 15 juil. 2015, 11:57

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

par donkeykick » 15 juil. 2015, 11:12

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