2017-05-01 1 views
0

J'ai un formulaire de contact simple sur mon site Web et il y a quelques jours j'ai commencé à recevoir des e-mails à moitié vide à partir du formulaire de contact sur le site.Comment empêcher les spammeurs de m'envoyer des e-mails vierges à partir de mon formulaire de contact

Ils regardant la même chose que l'exemple ci-dessous, rempli tout champ Nom et e-mail, mais les champs de téléphone et messagerie sont vides:

Nom: 5906f36c9c72b E-mail: [email protected] (en tout temps) différents e-mails téléphone:
message:

Ce code HTML est:

<form id="contactform" action="assets/php/mail_submit.php" method="post"> 
         <div class="row"> 
          <div class="col-xs-12 col-md-4"> 
           <input type="text" name="name" id="name" placeholder="Your Name" required/> 
          </div><!--column--> 
          <div class="col-xs-12 col-md-4"> 
           <input type="text" name="email" id="email" placeholder="Your email" required/> 
          </div><!--column--> 
          <div class="col-xs-12 col-md-4"> 
           <input type="text" name="phone" id="phone" placeholder="Ваш телефон" required/> 
          </div><!--column--> 
          <p class="antispam">Leave this empty: <input type="text" name="url" /></p> 
          <div class="col-xs-12 col-md-8"> 
           <textarea placeholder="Message" name="message" id="message" required></textarea> 
          </div><!--column--> 
          <div class="col-xs-12 col-md-4"> 
           <input class="btn btn-default" id="submit" type="submit" value="Send"/> 
          </div><!--column--> 

         </div><!--row--> 
        </form> 

C'est un script PHP:

<?php 

if (!isset($_REQUEST['name']) || !isset($_REQUEST['email']) || 
!isset($_REQUEST['message']) || !isset($_REQUEST['phone'])) { 
die(); 
} 

if (isset($_POST['name']) || isset($_POST['email']) || 
isset($_POST['message']) || isset($_POST['phone']) && !empty($_POST['name']) 
|| !empty($_POST['email']) || !empty($_POST['message']) | 
!empty($_POST['phone'])) { 

$your_email="[email protected]"; 



$name=$_POST['name']; 
$email=$_POST['email']; 
$message=$_POST['message']; 
$phone=$_POST['phone']; 

$to  = $your_email; 
$subject = "My Website: New Message! \r\n"; 


$message = ' 
     <html> 
     <head> 
      <title>Message from '. $name .'</title> 
     </head> 
     <body> 
      <table class="table"> 
      <tr> 
       <th align="right">Name:</th> 
       <td align="left">'. $name .'</td> 
      </tr> 
      <tr> 
       <th align="right">E-mail:</th> 
       <td align="left">'. $email .'</td> 
      </tr> 
      <tr> 
       <th align="right">Phone:</th> 
       <td align="left">'. $phone .'</td> 
      </tr> 
      <tr> 
       <th align="right">Message:</th> 
       <td align="left">'. $message .'</td> 
      </tr> 
      </table> 
     </body> 
     </html>'; 

     $headers .= "From: [email protected]\r\n"; 
     $headers .= "Reply-To: $email \r\n"; 
     $headers .= "Return-Path: $email\r\n"; 
     $headers .= "X-Mailer: PHP \r\n"; 
     $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; 

    mail($to, $subject, $message, $headers); 

} else { 
die(); 
} 
?> 

C'est le script AJAX:

function IsEmail(email) { 
    var regex = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9] 
{2,4})+$/; 
    return regex.test(email); 
} 

if($("#contactform").length!=0){ 
    $("#contactform").submit(function (e) { 
     e.preventDefault(); 
     var name = $("#name").val(), 
     email = $("#email").val(), 
     phone = $("#phone").val(), 
     message = $("#message").val(), 
     dataString = 'name=' + name + '&email=' + email+ '&phone=' + phone + 
'&message=' + message; 

     if (name === '' || !IsEmail(email) || phone === '' || message === 
'') { 
      $('#valid-issue').html('Not correct data').slideDown(); 
     } else { 
      $.ajax({ 
       type: "POST", 
       url: "/assets/php/mail_submit.php", 
       data: dataString, 
       success: function() { 
        $('#contactform').slideUp(); 
        $('#valid-issue').html('Thank you. Message was sent successfully.').show(); 
       } 
      }); 
     } 
    }); 
} 

J'ai vérifié les journaux et a constaté que tous les robots des spammeurs était de réseau Thor et adresses IP différentes. J'ai essayé captcha mais ça n'aide pas. Aide à conseiller s'il vous plaît ...

+0

Utilisez un captcha, qui empêche la plupart des robots. Si cela ne vous aide pas, vous ne l'avez pas implémenté correctement. – Qirel

Répondre

0

Essayez de renforcer votre javascript vérifier, utilisez aussi "trim":

var name = $("#name").val().trim(); 

Utilisez PHP str_word_count pour renforcer le contrôle pour le message vide.

par ex.

$message= filter_input(INPUT_POST, 'message'); 

// check $message is not empty and that it contains more than 5 words 
if($message != "" || str_word_count($message) < 5) { 
    echo "Message is valid" 

}else{ 
    echo "Invalid Message"; 
} 

I quelques autres mauvaises choses avec votre code PHP: Vous ne devriez jamais accéder à POST superglobale/GET des variables directement. Utilisez les fonctions de filtrage PHP intégrées ou personnalisées.

$name= filter_input(INPUT_POST, 'name'); 

Ou vous pouvez utiliser

function FilterData($value){ 

    $trimmed = trim($value); 
    $notags = strip_tags($trimmed); 
    return $notags; 
}  

Puis:

$name = FilterData($_POST['name']); 

Pour l'e-mail, vous pouvez utiliser

$email = filter_var($email, FILTER_SANITIZE_EMAIL); 

Plus d'info here et here

Espérons que cela aide;)

+0

Salut, je l'ai essayé mais les spams arrivent toujours. En tout cas, merci! – danibeiss

+0

Les messages sont-ils toujours vides? –