Sécurité formulaire mail

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 : Sécurité formulaire mail

par Neomcdn » 11 mai 2007, 15:22

Salut à tous!

Pas beaucoup de réponses, mais on a avancé quand même: si cela peut aider, voici le code utilisé pour protéger le formulaire mail.

Code : Tout sélectionner

<?php $cryptinstall="./crypt/cryptographp.fct.php"; include $cryptinstall; if (chk_crypt($_POST['code'])) { //Répartition des mails if (trim($_POST['categorie']) == 1){$to = "[email protected]"; }else if (trim($_POST['categorie']) == 2){$to = "[email protected]"; }else if (trim($_POST['categorie']) == 3){$to = "[email protected]"; }else if (trim($_POST['categorie']) == 4){$to = "[email protected]"; }else if (trim($_POST['categorie']) == 5){$to = "[email protected]";} //Code pour comprendre les balises HTML $headers = "From: " . (trim($_POST['adresseemail'])); //Récupération de la catégorie dans l'objet du message if (trim($_POST['categorie']) == 1){$subject ="Adhérer"; }else if (trim($_POST['categorie']) == 2){$subject ="Participer"; }else if (trim($_POST['categorie']) == 3){$subject ="Avertir"; }else if (trim($_POST['categorie']) == 4){$subject ="Notifier"; }else if (trim($_POST['categorie']) == 5){$subject ="Quitter";} //Affichage du body, formaté $body = (trim($_POST['type'])).' : '.(trim($_POST['corps'])).' '; //Vérif entete de mail: on apllique *** si l'entete contient un des caractères $find = array("/bcc\:/i","/Content\-Type\:/i","/cc\:/i","/to\:/i", "/Mime\-Type\:/i"); $to = preg_replace($find, "***", $to); $headers = preg_replace($find, "***", $headers); $subject = preg_replace($find, "***", $subject); $body = preg_replace($find, "***", $body); //Vérif sauts de ligne if ((strstr($to, "\n")) || (strstr($to, "\r")) || (strstr($subject, "\n")) || (strstr($subject, "\r")) || (strstr($body, "\n")) || (strstr($body, "\r")) || (strstr($headers, "\n")) || (strstr($headers, "\r")) || (strstr($to, "***")) || (strstr($headers, "***")) || (strstr($subject, "***")) || (strstr($body, "***"))){ header('Location: erreur.php'); }else{ //Fonction mail mail($to,$subject,$body,$headers); //Si réussite header('Location: ok.php');} }else{ //Si cryptographe non reconnu header('Location: erreur.php');} ?>
PS: le Cryptographe est un script téléchargé après avoir cherché sur ggogle: CAPTCHA: http://www.cryptographp.com/
@+ :wink:

par Neomcdn » 08 mai 2007, 14:36

Coucou à tous!

Que veut dire svp le \n ou le \r?? On a récupéré çà avec Dreamweaver, mais on ne sait pas à quoi ils correspondent.

Merci d'avance!

Sécurité formulaire mail

par Neomcdn » 07 mai 2007, 16:19

Bonjour à tous!

Nous mettons actuellement un site en ligne et nous voulons éviter d'être spammé.

Nous avons travaillé notre code de validation de formulaire (vérification e-mail valide,...), puis nous avons travaillé le code du fichier php qui traite l'envoi du message.

Le code est le suivant:

 <?php 
 $cryptinstall="./crypt/cryptographp.fct.php";
 include $cryptinstall;  

  if (chk_crypt($_POST['code'])) {

//Répartition des mails 
if (trim($_POST['categorie']) == 1){$to = "[email protected]";
}else if
(trim($_POST['categorie']) == 2){$to = "[email protected]";
}else if
(trim($_POST['categorie']) == 3){$to = "[email protected]";
}else if
(trim($_POST['categorie']) == 4){$to = "[email protected]";}

//Code pour comprendre les balises HTML
$headers = "From: " . stripslashes (trim($_POST['adresseemail'])) . "\n";
$headers .= "MIME-version: 1.0\n"; 
$headers .= "Content-type: text/html; charset= iso-8859-1\n"; 

//Récupération de la catégorie dans l'objet du message
if (trim($_POST['categorie']) == 1){$subject ="Etre référencé sur le site monsite";
}else if
(trim($_POST['categorie']) == 2){$subject ="Participer à la rédaction du contenu sur le site";
}else if
(trim($_POST['categorie']) == 3){$subject ="Avertir d'un problème ou d'une erreur sur le site";
}else if
(trim($_POST['categorie']) == 4){$subject ="Notifier le caractère illicite d'un article ou d'un lien";}

//Affichage du body, formaté
$body = '<p><b>Catégorie :</b><u> '.stripslashes(trim($_POST['type'])).'</u></p><p> '.stripslashes (trim($_POST['corps'])).'</p>';

//Vérif sauts de ligne
/if ((strstr($to, "\n")) or (strstr($to, "\r")) or (strstr($subject, "\n")) or (strstr($subject, "\r")) or (strstr($body, "\n")) or (strstr($body, "\r"))\ or (strstr($headers, "\n")) or (strstr($headers, "\r"))){exit();}
 
 //Vérif entete de mail: on applique *** si l'entete contient un des caractères
$find = array("/bcc\:/i","/Content\-Type\:/i","/cc\:/i","/to\:/i", "/Mime\-Type\:/i"); 
$to = preg_replace($find, "***", $to);
$headers = preg_replace($find, "***", $headers); 
$subject = preg_replace($find, "***", $subject); 
$body = preg_replace($find, "***", $body);

//Puis on regarde si l'un des champs contient '***':
if ((strstr($to, "***")) or (strstr($headers, "***")) or (strstr($subject, "***")) or (strstr($body, "***"))){
  header('Location: message-visiteur-erreur.php');}

//Fonction mail
mail($to,$subject,$body,$headers);

//Si réussite
header('Location: message-visiteur-envoye.php');}


//SI echec
else{header('Location: message-visiteur-erreur.php');}
 
?>
Nous avons plusieurs problèmes:

- Le formatage du body en HTML provoque une erreur à la vérification des sauts de ligne.
- Nous nous demandons en plus si la protection est réellement efficace, puisque la mise en commentaire ou non des vérifications des sauts de ligne et des entetes semble ne pas affecter le traitement de l'envoi du mail.
- Plusieurs éléments semblent se contredire :stripslashes, "\n" dans le $headers, vérif sauts de ligne et vérif entete de mail.

En espérant avoir été assez clair, merci d'avance!

@+!