【问题标题】:How to prevent spammers to send me blank emails from my contact form如何防止垃圾邮件发送者从我的联系表中向我发送空白电子邮件
【发布时间】:2017-09-28 17:33:36
【问题描述】:

我的网站上有简单的联系表格,几天前我开始收到来自网站联系表格的半空白电子邮件。

他们看起来与下面的示例相同,只填写了姓名和电子邮件字段,但电话和消息字段为空:

姓名: 5906f36c9c72b 电子邮件: njhjlee@gmail.com(任何时间不同的电子邮件) 电话:
消息:

这是 HTML 代码:

<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 脚本:

<?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="my@mail.com";



$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: no-reply@website.com\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 脚本:

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

我检查了日志,发现所有垃圾邮件机器人都来自 Thor 网络并且具有不同的 IP。我尝试了验证码,但没有帮助。请帮忙指教...

【问题讨论】:

  • 使用验证码,可以防止大多数机器人。如果没有帮助,则说明您没有正确实施。

标签: javascript php email contact-form spam-prevention


【解决方案1】:

尝试加强您的 javascript 检查,同时使用“trim”:

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

使用 PHP str_word_count 加强对空消息的检查。

例如。

$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 代码还有其他一些错误: 您永远不应该直接访问超全局 POST/GET 变量。使用 PHP 内置过滤功能或自定义功能。

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

或者你可以使用

function FilterData($value){

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

然后:

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

对于您可以使用的电子邮件

$email = filter_var($email, FILTER_SANITIZE_EMAIL);

更多信息herehere

希望对你有帮助;)

【讨论】:

  • 嗨,我已经尝试过了,但垃圾邮件仍然会出现。无论如何,谢谢!
  • 邮件还是空的吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2011-08-14
相关资源
最近更新 更多