Formulaire et code de securité antispam

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 : Formulaire et code de securité antispam

par jumper » 03 mai 2008, 15:19

Euréka !!
En fait dans ma précipitation, j'avais oublié un morceau de code ...... :roll:
voici le fichier de traitement du formulaire en état de marche.
Si quelqu'un est intéressé par le syteme de formulaire en entier, je suis bien sur disposé à donner tous les codes (formulaire, captcha, traitement .... etc).
<?php 
// On initialise la session 
session_start(); 
/* on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères */ 
if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !");
if($_SESSION['code'] != $_POST['verif'])
{ 
   $insertGoTo = "redirect_NOT_OK.ph"; 
   if (isset($_SERVER['QUERY_STRING'])) { 
       $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; 
      $insertGoTo .= $_SERVER['QUERY_STRING']; 
      } 
   header(sprintf("Location: %s", $insertGoTo));
    
} 
else 
{ 
if($_SESSION['code'] == $_POST['verif']) 
{ 
    
   $adress = "[email protected] "; 
   $sujet = "Formulaire "; 
   $message = "UN ENVOI DE FORMULAIRE A ETE EFFECTUE DEPUIS MON SITE \n\n"; 
    
   $message .= "------------------- Parametres d'acces   ------------------- \n"; 
   $message .= "Email: {$_POST['email']}\n"; 
   $message .= "Mot de passe choisi: {$_POST['password']}  Mot de passe confirmé: {$_POST['pass2']}\n"; 
   $message .= "------------------- Informations société ------------------- \n"; 
    
   $message .= "Raison sociale: {$_POST['raison']}\n"; 
   $message .= "N°RCS/Siren/Siret: {$_POST['siret']}  Code NAF/APE: {$_POST['ape']}\n"; 
   $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; 
   $message .= "Activité: {$_POST['activite']}\n"; 
   $message .= "------------------------- Contact --------------------------- \n"; 
   $message .= "Civilité: {$_POST['titre']}  Nom/prénom: {$_POST['nom']}\n"; 
   $message .= "Fonction dans l'entreprise: {$_POST['fonction']}\n"; 
   $message .= "Téléphone: {$_POST['tel']}\n"; 
   $message .= "Téléphone portable: {$_POST['gsm']}\n"; 
   $message .= "Fax: {$_POST['fax']}\n"; 
    
    
   $message .= "------------------ Adresse de facturation ----------------- \n"; 
   $message .= "Adresse: {$_POST['adresse']}\n"; 
   $message .= "Responsable comptable: {$_POST['resp']}\n"; 

   $message .= "------------------ Adresse de livraison ------------------ \n"; 
   $message .= "Adresse: {$_POST['adresseliv']}\n"; 
   $message .= "Tel. service livraisons: {$_POST['telliv']}\n"; 
   $message .= "Fax service livraisons: {$_POST['faxliv']}\n"; 

   $message .= "---------------- Informations comptables ----------------- \n"; 
   $message .= "Moyen de paiement souhaité: {$_POST['paiement']}\n"; 
   $message .= "N° IBAN: {$_POST['iban']}\n"; 
   $message .= "Code SWIFT/BIC: {$_POST['swift']}\n"; 
   $message .= "N° compte bancaire: {$_POST['compte']}\n"; 
   $message .= "Titulaire du compte: {$_POST['titcompte']}\n"; 
   $message .= "Nom et domiciliation de la banque: {$_POST['banque']}\n"; 
   $message .= "---------------------------------------------------------- \n"; 
   $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; 
   $message .= "---------------------------------------------------------- \n"; 
    
    
    
    
   $entete = "From: MON SITE\n"; 
   mail($adress, $sujet, $message, $entete); 
   //page de sortie 
   $insertGoTo = "redirect_OK_fr.php"; 
   if (isset($_SERVER['QUERY_STRING'])) { 
       $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; 
      $insertGoTo .= $_SERVER['QUERY_STRING']; 
      } 
   header(sprintf("Location: %s", $insertGoTo)); 
} 
} 
session_unset(); 
session_destroy(); 
?> 

Bonne journée :wink:

par jumper » 02 mai 2008, 15:35

Bonjour
J'ai modifié mon code en utilisant vos 2 dernieres réponses, mais toujours pareil !!
Code bon, pas de problème la redirection est ok
Par contre si le code est mauvais, toujours page blanche sur le formulaire de traitement.... :(

par caroube » 26 avr. 2008, 19:09

Essaye avec
header("location:...");
exit();
Pour moi, mettre le exit a marché ...

par lux » 26 avr. 2008, 17:08

Au passage, quand tu postes du code tu peux utiliser les balises PHP au lieu des balises Code, ça coloriera le code plus joliment, ce sera plus lisible 8-)

par Cyrano » 26 avr. 2008, 16:49

Cette variables est obsolète : $HTTP_SERVER_VARS

Si tu es sous PHP5, utilise $_SERVER à la place (avec les mêmes index) : teste avec ça et reviens si ça bafouille toujours.

par jumper » 26 avr. 2008, 13:14

Personne n'as une idée de ce qui coince ??

par jumper » 25 avr. 2008, 11:20

voici les changements que j'ai effectués.

Code : Tout sélectionner

<?php // On initialise la session session_start(); /* on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères */ if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) { $insertGoTo = "monsite/redirect_secu.ph"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } else { if($_SESSION['code'] == $_POST['verif']) { $adress = "[email protected] "; $sujet = "Envoi de formulaire d'enregistrement"; $message = "UN ENVOI DE FORMULAIRE A ETE EFFECTUE DEPUIS MON SITE \n\n"; $message .= "------------------- Parametres d'acces ------------------- \n"; $message .= "Email: {$_POST['email']}\n"; $message .= "Mot de passe choisi: {$_POST['password']} Mot de passe confirmé: {$_POST['pass2']}\n"; $message .= "------------------- Informations société ------------------- \n"; $message .= "Raison sociale: {$_POST['raison']}\n"; $message .= "N°RCS/Siren/Siret: {$_POST['siret']} Code NAF/APE: {$_POST['ape']}\n"; $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; $message .= "Activité: {$_POST['activite']}\n"; $message .= "------------------------- Contact --------------------------- \n"; $message .= "Civilité: {$_POST['titre']} Nom/prénom: {$_POST['nom']}\n"; $message .= "Fonction dans l'entreprise: {$_POST['fonction']}\n"; $message .= "Téléphone: {$_POST['tel']}\n"; $message .= "Téléphone portable: {$_POST['gsm']}\n"; $message .= "Fax: {$_POST['fax']}\n"; $message .= "------------------ Adresse de facturation ----------------- \n"; $message .= "Adresse: {$_POST['adresse']}\n"; $message .= "Responsable comptable: {$_POST['resp']}\n"; $message .= "------------------ Adresse de livraison ------------------ \n"; $message .= "Adresse: {$_POST['adresseliv']}\n"; $message .= "Tel. service livraisons: {$_POST['telliv']}\n"; $message .= "Fax service livraisons: {$_POST['faxliv']}\n"; $message .= "---------------- Informations comptables ----------------- \n"; $message .= "Moyen de paiement souhaité: {$_POST['paiement']}\n"; $message .= "N° IBAN: {$_POST['iban']}\n"; $message .= "Code SWIFT/BIC: {$_POST['swift']}\n"; $message .= "N° compte bancaire: {$_POST['compte']}\n"; $message .= "Titulaire du compte: {$_POST['titcompte']}\n"; $message .= "Nom et domiciliation de la banque: {$_POST['banque']}\n"; $message .= "---------------------------------------------------------- \n"; $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; $message .= "---------------------------------------------------------- \n"; $entete = "From: Mon site\n"; mail($adress, $sujet, $message, $entete); //page de sortie $insertGoTo = "monsite/redirect_revendeurs_fr.php"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } } session_unset(); session_destroy(); ?>
alors, en cas de bon code, ok, c'est redirigé sur redirect_revendeurs_fr.php
mais si le code est mauvais tout s'arrete sur form_fr.php (le nom du fichier contenant le code plus haut), la redirection vers redirect_secu.ph ne se fait pas , j'ai juste une page blanche...
pas facile !!

par guilt92 » 25 avr. 2008, 11:16

Le if - else fonctionne de la façon suivante :
if(condition)
   {
   //j'execute ce code uniquement si la condition est vraie
   }
else
    {
    //j'éxecute ce code dans tous les autres cas, c'est à dire si ma condition n'est pas vraie
    }
Donc dans ton cas l'idée est la suivante :

Si le code est invalide ==> header("autre_page")
Sinon traitement du formulaire

je pense qu'avec ces indications tu pourras adapter ton code toi même ;)

(petit indice supplémentaire : tu peux "imbriquer" des conditions, donc rien n'empeche d'avoir un if dans un else ou dans un autre if... par exemple
if(condition)
    {
    action
    }
else
    {
    if(autre condition)
         {
         }
     else 
         {
         }
    }

par jumper » 25 avr. 2008, 11:08

Oui là faut peut etre que je parte sur quelque chose comme ça mais en grand débutant que je suis, je n'arrive pas vraiment à tout saisir .... serais-ce abuser que de te demander comment tu verrai la chose ? :D

par guilt92 » 25 avr. 2008, 11:04

oups désolé je m'étais arreté apres le code apparemment :(

Pourquoi ne pas entourer le traitement du formulaire d'un else {} après le if($_SESSION['code'] != $_POST['verif'])

Comme ca tu es sur de n'entrer dans le traitement que si le code est valide...

par jumper » 25 avr. 2008, 11:02

ben si tu as bien lu mon message, je dis que lorsque je fais celà, meme si le code de securité est mauvais, le traitement du formulaire est effectué quand meme .....donc ça gaze pas
Merci quand meme pour le lien.

par guilt92 » 25 avr. 2008, 10:45

Bonjour,

Pourquoi ne pas simplement remplacer l'instruction die("Code de securité invalide !"); par un header("page de destination"); ?

Formulaire et code de securité antispam

par jumper » 25 avr. 2008, 09:19

Bonjour, j'ai mis en palce un formulaire avec code de securité.
Si le formulaire est bien rempli et que le capcha est bon, l'utilisateur est redirigé automatiquement.
Par contre si le capcha est mauvais, tout est stoppé a cause de l'instruction Die. J'aimerai à la place faire aussi une redirection mais je n'y arrive pas.
Voici le code du traitemant de mon formulaire:

Code : Tout sélectionner

<?php // On initialise la session session_start(); //on vérifie que la code est toujours mémorisé en session et qu'il fait 6 caractères if(!isset($_SESSION['code']) || strlen($_SESSION['code']) != 6) die("Erreur !"); // on vérifie que la code entré est valide if($_SESSION['code'] != $_POST['verif']) die("Code de securité invalide !"); //Traitement du formulaire si le code de securité est bon if($_POST['action'] == 'submitted') { $adress = "[email protected] "; $sujet = "Formulaire "; $message = "FORMULAIRE \n\n"; $message .= "------------------- Parametres d'acces ------------------- \n"; $message .= "Email: {$_POST['email']}\n"; $message .= "Mot de passe choisi: {$_POST['password']} Mot de passe confirmé: {$_POST['pass2']}\n"; $message .= "------------------- Informations société ------------------- \n"; $message .= "Raison sociale: {$_POST['raison']}\n"; $message .= "N°RCS/Siren/Siret: {$_POST['siret']} Code NAF/APE: {$_POST['ape']}\n"; $message .= "N°TVA Intracommunautaire: {$_POST['tva']}\n"; $message .= "Activité: {$_POST['activite']}\n"; $message .= "------------------------- Contact --------------------------- \n"; $message .= "Civilité: {$_POST['titre']} Nom/prénom: {$_POST['nom']}\n"; $message .= "Adresse/Rue: {$_POST['fonction']}\n"; $message .= "code postal: {$_POST['tel']}\n"; $message .= "Ville: {$_POST['gsm']}\n"; $message .= "Téléphone: {$_POST['fax']}\n"; $message .= "------------------ Adresse de facturation ----------------- \n"; $message .= "Adresse: {$_POST['adresse']}\n"; $message .= "Responsable comptable: {$_POST['resp']}\n"; $message .= "---------------------------------------------------------- \n"; $message .= "ORIGINE DU FORMULAIRE: FRANCE \n"; $message .= "---------------------------------------------------------- \n"; $entete = "From: ma boutique\n"; mail($adress, $sujet, $message, $entete); //page de sortie redirection $insertGoTo = "redirection_si_ok.php"; if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) { $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; $insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING']; } header(sprintf("Location: %s", $insertGoTo)); } // on détruit les variables de session, désormais inutiles session_unset(); session_destroy(); ?>
J'ai essayé avec header location mais en fait meme si le code capcha est faux , celà traite quand meme le formulaire
Pouvez-vous m'aider ?
Merci d'avance