2017-05-01 3 views
0

私は私のウェブサイトで簡単なコンタクトフォームを持っていて、数日前に私はウェブサイトのコンタクトフォームから半分の空メールを受け取りました。スパマーが私のコンタクトフォームから私に空メールを送るのを防ぐ方法

彼らは下のサンプルと同じように見ているが、単に名前とメール欄に記入したが、電話とメッセージフィールドは空です:

名: 5906f36c9c72b Eメール: [email protected] (いつでも別の電子メール) 電話:
メッセージ:これは、HTMLコードが

です:

私は、ログをチェックし、すべてのスパマーボットはトールネットワークから、異なるIPアドレスであったことを発見した

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(); 
       } 
      }); 
     } 
    }); 
} 

<?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(); 
} 
?> 

これは、AJAXスクリプトです:

<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> 

これはPHPスクリプトです。私はcaptchaを試みたが、それは助けにはならない。

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

使用空のメッセージのためのチェックを強化するPHPのstr_word_count:「トリム」を使用また、チェックあなたのjavascriptを強化するために助言してください...

+0

ほとんどのボットを防ぐキャプチャを使用します。それが助けにならないなら、あなたはそれを正しく実装していません。 – Qirel

答えて

0

てみて助けます。

例えば、

$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"; 
} 

PHPコードとI他のいくつかの間違ったこと: あなたが直接スーパーグローバルPOST/GET変数にアクセスすることはありません。 PHPの組み込みフィルタ関数またはカスタマイズされた関数を使用します。

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

それとも、その後

function FilterData($value){ 

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

使用することができます:あなたは

$email = filter_var($email, FILTER_SANITIZE_EMAIL); 

詳細情報を使用することができ、電子メールの場合は

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

herehere

希望する;)

+0

こんにちは、私はそれを試みましたが、スパムメールはまだ来ています。とにかくありがとうございました! – danibeiss

+0

メッセージはまだ空ですか? –

関連する問題