Sécurité formulaire mail
Posté : 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:
- 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!
@+!
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!
@+!