8798 sujets

Développement web côté serveur, CMS

Salut à tous,

j'ai donc cette erreur lorsque l'on clique sur "envoyer" sur le formulaire

Warning: mail() [function.mail]: Permission denied: headers injection (empty line) in /home/www/.../recupmail.php on line 43

la ligne 43 :


a écrit :
mail($to, $mail, $msg, $headers);



et cela viendrai de l'hébergeur qui a mis une sécurité.
Je dois faire çà mais je comprend rien à la manip :


a écrit :
Quelques sites ont été victimes d'une attaque distribuée visant à envoyer un mailing en masse de spam via des sites client.

En effet, des spammeurs ont répertorié toutes les pages ayant un formulaire de contact envoyant un email. Plusieurs sites hébergé chez nous et dans le monde ont donc été exploité de la même façon.

Ils se sont servis d'une faille existante dans beaucoup de formulaires de contact qui ne vérifient pas la présence de retour de ligne dans certains champs, en particulier celui de l'e-mail de l'expéditeur à compléter dans les formulaires.

Vous pouvez éviter que cela se produise, soit en désactivant le script PHP de contact e-mail de votre site, soit en vous assurant qu'il n'y a pas de retour de ligne dans chacun des champs du formulaire de contact de votre site.

Voici comment éviter simplement que ceci soit exploitable en remplaçant les retours de ligne dans chacun des champs devant normalement contenir un email (ce champ est souvent nommé $email, $sender ou $from):

$EMAIL = str_replace("\n", "", str_replace("\r", "", $EMAIL));

Le spammer exploite les scripts ressemblant à ceci

$MESSAGE = $_POST[m s g];
$RECIPIENT = "webmaster@votredomaine.com";
$SUBJECT = "Formulaire de contact";
$EMAIL = $_POST[e m a i l];

// Sans cette ligne votre script est exploitable !!!!
$EMAIL = str_replace("\n", "", str_replace("\r", "", $EMAIL));

mail($RECIPIENT, $SUBJECT, $MESSAGE, "From: $EMAIL" );


Merci de bien vouloir vérifier ceci dans vos scripts PHP.


Lien de l'explication du problème sur le site de l'hébergeur :

Lien de l'explication du problème sur le site de l'hébergeur
Résolution de l'hébergeur à laquelle je ne comprend rien


Mon script :



<?php 
/* Récupération des valeurs des champs du formulaire */ 
if (get_magic_quotes_gpc()) 
{ 
    $Nom = stripslashes($_POST['Nom']);  
    $société = stripslashes($_POST['société']);  
    $mail = stripslashes($_POST['mail']);  
    $Prénom = stripslashes($_POST['Prénom']);  
    $message = stripslashes($_POST['message']);  
 
 
}  
else 
{   
    $Nom = $_POST['Nom']; 
    $société = $_POST['société'];  
    $email = $_POST['mail'];  
    $Prénom = $_POST['Prénom'];  
    $message = $_POST['message'];  
} 
  
 /* Destinataire (mon adresse e-mail) */ 
$to = 'xxxxx@xxxxxx; 
  
/* Construction du message */ 
$msg  = 'Bonjour,'."\r\n\r\n"; 
$msg .= 'Ce mail a été envoyé depuis la page Devis pour la Machine à Bois par M. '.$Nom.' '.$Prénom.' de la société '.$société."\r\n\r\n"; 
$msg .= 'son adresse e-mail est :'.$mail."\r\n"; 
 
$msg .= 'Voici le message qui vous est adressé :'."\r\n"; 
$msg .= '***************************'."\r\n"; 
$msg .= $message."\r\n"; 
$msg .= '***************************'."\r\n"; 
$msg .= 'Et les caractéristiques souhaité pour leur machine à bois personnalisé :'."\r\n"; 
 
  
/* En-têtes de l'e-mail */ 
$headers = 'From: '.$nom.' <'.$mail.'>'."\r\n\r\n"; 
  
/* Envoi de l'e-mail */ 
 
mail($to, $mail, $msg, $headers); 
 
?>



merci de m'aider
a+
Modifié par mough-lee (28 May 2009 - 14:49)
Salut,

déjà il y a un problème dans ton code puisque une fois tu utilises la variable $mail = et l'autre fois $email = (il faut choisir ! Pour la suite j'utiliserai $mail). Ensuite on évite généralement d'utiliser des accents dans le nom des variables.

Ensuite et si je comprends bien ce que dis la FAQ il faut remplacer
/* En-têtes de l'e-mail */ 
$headers = 'From: '.$nom.' <'.$mail.'>'."\r\n\r\n"; 
par
/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.' <'.$mail.'>'";
$headers = str_replace("\n", "", str_replace("\r", "", $headers));