Bonjour,
j'ai fait un formulaire de mail. ma validation php est la suivante :

$_VALIDATED'nom'] = (preg_match('/^[a-zA-Z\-\]{2,30}$/', $_POST'nom']))?$_POST'nom']:false;
$_VALIDATED'prenom'] = (preg_match('/^[a-zA-Z\-\]{2,30}$/', $_POST'prenom']))?$_POST'prenom']:false;
$_VALIDATED'mail'] = filter_input(INPUT_POST, 'mail', FILTER_VALIDATE_EMAIL);
$duplicate = $_POST'duplicate'];
$unsafeInput = $_POST'contenu'];
$_VALIDATED'contenu'] = preg_replace('/<(\/?)(frame|iframe|script)(.*)>/Uim', '<\1\2\3>', $unsafeInput);
$_VALIDATED'contenu'] = preg_replace('/\"/Uim', '"', $_VALIDATED'contenu']);
/**
* builds error list
**/
$err = false;
$errors = "";
foreach ($_VALIDATED as $key => $value) {
  if (!$value){
    $err = true;
    $errors .="<li>erreur dans le champ $key</li>";
  }
}
if (!$err){
  /**
  * Sets headers
  **/
  $to = 'contact@crozet-magenta.fr';
  $to .= ($duplicate)?','.$_VALIDATED'mail']:"";
  $subject = "{$_VALIDATED'prenom']} {$_VALIDATED'nom']} vous envoie un message";
  $headers = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
  $headers .= 'From:'. $_VALIDATED'mail'] . "\r\n";
  $headers .= 'bcc:'. $to . "\r\n";
  /**
  * builds HTML message
  **/
  $message = '
  <html>
   <head>
    <title>'.$subject.'</title>
   </head>
   <body>'
    .stripslashes($_VALIDATED'contenu']).
   '</body>
  </html>
  ';
  /**
  * Tries to send mail and displays result
  **/
  if (mail($to, $subject, $message, $headers)){
    echo "<fieldset class='success'><legend class='title'>Resultat de l'envoi</legend>
      Le mail a été correctement envoyé.
      </fieldset>
      ";
  } else {
    echo "<fieldset class='error'><legend class='title'>Resultat de l'envoi</legend>
      Le mail n'a pas pu être envoyé suite à une erreur interne, veuillez réessayer plus tard.
      </fieldset>
      ";
  }
} else {
  /**
  * stores errors in session and redirects to the contact form
  **/
  $_SESSION'errors'] = "Le mail n'a pas été envoyé, il y a les erreurs suivantes dans le formulaire :<br><ul>$errors</ul>";
  echo '<META HTTP-EQUIV="Refresh" CONTENT="0; URL='.$_ROOT.'Contact">';
  exit();
}

est-ce que la protection est efficace ou est-ce que j'ai raté des étapes ?

1 réponse


Le top serait d'ajouter un filtre de spam en plus comme akismet