【问题标题】:Receiving unfilled contact forms on email通过电子邮件接收未填写的联系表格
【发布时间】:2016-04-20 21:03:07
【问题描述】:

所以在过去的 2 个月里,我的网站上线了,我收到了 2 封来自我的联系表格的普通电子邮件,以及 30 封未填写的空表格电子邮件。我也使用验证器http://faireware.de/js/jquery.form-validation-and-hints.js。 奇怪的是,当我不填写表格并按发送时,我不会让这些电子邮件为空。它以某种方式自动发生......垃圾邮件机器人或其他什么,可能吗?

我的 HTML 代码是:

<form method="post" action="contactengine.php">

  <div class="field required">
    <p>Name<br>
    <input class="text verifyText hint" name="name" type="text" size="25" title="*Ihr Name..."></p>
  </div><!--/field--> 

  <div class="field required ">
    <p>E-Mail<br>
    <input class="email verifyMail hint " name="email" type="text" size="25" title="*Ihre E-Mail-Adresse..."></p>
    </div><!--/field-->

    <div class="field required ">
      <p>Nachricht<br>
      <textarea name="message" rows="50" cols="50" title="*Schreiben Sie Ihre Nachricht..." class="hint "></textarea></p>
    </div><!--/field-->
  <p><input class="submit" type="submit" value="Senden"></p>
</form>

而我的contactengine.php 是:

<?php

$Subject = "Kontaktformular - FaireWare";
$Name = Trim(stripslashes($_POST['name'])); 
$Email = Trim(stripslashes($_POST['email'])); 
$Message = Trim(stripslashes($_POST['message'])); 
$EmailFrom = $Email;
$EmailTo = "info@faireware.de";

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
  exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n\n";
$Body .= "E-Mail: ";
$Body .= $Email;
$Body .= "\n\n";
$Body .= "Nachricht: ";
$Body .= "\n";
$Body .= $Message;
$Body .= "\n\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: $Email");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.html\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
}
?>

空的电子邮件表格确实是这样的:

Name: 

E-Mail: 

Nachricht:

它会自动执行吗?它如何超越验证...?我不知道 PHP 和很少的 java,所以有人知道问题可能出在哪里吗?

谢谢!

【问题讨论】:

  • 如果您直接点击contactengine.php然后发送空白电子邮件。请添加服务器端验证,在客户端添加验证码。
  • 它的验证问题,$validationOK 默认为 true。验证码在哪里??
  • 您没有验证字段,即在发送邮件之前字段是否为空。利用empty()函数。
  • 如果页面引用或仅提交带有空字段的按钮,您将收到空电子邮件..
  • 当我填写所有字段并单击发送时,我会立即收到一封电子邮件。当我的字段为空时单击发送时,我没有收到空电子邮件。至少不是马上。它根本没有通过验证。如果我单击带有空字段的发送是否有可能仍然发送电子邮件,即使只是在一天之后或之后?或者那些是垃圾邮件机器人或类似的东西?

标签: javascript php html forms email


【解决方案1】:

你可以试试这个,我已经用基本的服务器端验证修改了你的代码。

<?
if(count($_POST) > 0)
{
    $Subject = "Kontaktformular - FaireWare";
    $Name = trim(stripslashes($_POST['name'])); 
    $Email = trim(stripslashes($_POST['email'])); 
    $Message = trim(stripslashes($_POST['message'])); 
    $EmailTo = "info@faireware.de";

    $validationOK = true;
    if(empty($Name) || empty($Email) || empty($Message)){
        $validationOK = false;
    }

    if (!$validationOK) {
      print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
      exit;
    }
    else
    {
        // prepare email body text
        $Body = "";
        $Body .= "Name: ";
        $Body .= $Name;
        $Body .= "\n\n";
        $Body .= "E-Mail: ";
        $Body .= $Email;
        $Body .= "\n\n";
        $Body .= "Nachricht: ";
        $Body .= "\n";
        $Body .= $Message;
        $Body .= "\n\n";
        $headers = 'From: $Email' . "\r\n";

        // send email 
        $success = mail($EmailTo, $Subject, $Body, $headers);

        // redirect to success page 
        if ($success){
          print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.html\">";
        }
        else{
          print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
        }
    }
}
?>

我改变了什么?

如果$_POST 数组不为 0,则添加开始检查,然后使用 empty() 添加基本验证。 If任何一个字段为空的邮件都不会发送else你会收到邮件。

【讨论】:

  • 感谢您的帮助。我会试试这个,我会让你知道我收到更多未填写的联系表格电子邮件。抱歉,我想我应该有发送链接,这样你就可以看到它在现实生活中的样子:faireware.de/test/kontaktformular.html
  • 在阅读了@Android Gears 的评论后,我刚刚注意到如果有人直接打开contactengine.php,它会向我发送一封空电子邮件。我的猜测是,没有普通用户会这样做。那么垃圾邮件机器人会这样做吗?使用您的代码却没有,这已经很棒了! :)
  • @drakal 是的,我知道它现在会起作用,如果你摔倒了,这是最好的答案,而不是通过单击左侧的绿色勾号标记为已接受,这将在未来对其他人有所帮助
【解决方案2】:

尝试将您的服务器端代码更新为牢不可破以避免垃圾邮件。这里有一些建议。

  1. Google Recaptcha
  2. Honeypot Technique

还要进行服务器端 isset 检查。

if(isset($_POST['name'])){
 // Save the data or do the further processing
}

建议:开发安全应用时不要依赖客户端验证。

【讨论】:

  • 感谢您的帮助。目前我宁愿不使用验证码。这只是一个简单的联系表格,供人们联系,而我却收到垃圾邮件。如果没有其他帮助,我会这样做。谢谢你的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2015-09-16
相关资源
最近更新 更多