Page 1 sur 1

Sécurité formulaire mail

Posté : 07 mai 2007, 16:19
par Neomcdn
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!

@+!

Posté : 08 mai 2007, 14:36
par Neomcdn
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!

Posté : 11 mai 2007, 15:22
par Neomcdn
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: