试图实现一个简单的垃圾邮件拦截器

时间:2014-07-28 14:48:24

标签: javascript php email spam spam-prevention

我接管了由其他人建造的网站的维护。这个站点主要是HTM / CSS,但它使用奇怪的javascript代码和PHP,后者由签约的后端程序员实现。

我遇到的问题是这个 - 网站包含很多页面,每个页面都有自己独特的电子邮件表单。创建这些表单中的每一个都不关心垃圾邮件。现在这些表格收到了大量的垃圾邮件,我希望能够纠正这个问题(不管我既不是Javascript也不是PHP程序员)。我需要一些帮助,因为我不能尝试通过这个电子邮件系统的重要性来猜测解决方案。

我希望我可以发布代码并让某人指导我完成蜜罐或简单数学方程式的过程(我知道这不是100%万无一失,但这些都很差制作垃圾邮件,这个网站很可能不会成为目标。

表单页面:此页面包含一些PHP,一些Javascript,但主要是我将避免发布的内容,因为它不重要。但是,我会按顺序发布脚本。 (此外,productformvalidation.js文件是一个简单的Javascript脚本,如果电子邮件/电话号码没有正确的字符,则会弹出弹出消息。如果需要,我也可以提供)

<?php

/* validation function for when they press the submit button */
function validateFields($fields, $form_vars) {
$errors = array();
    foreach($fields as $field_name => $error_msg) {
    $value_entered = trim(@$form_vars[$field_name]);
    if(empty($value_entered)) {
        $errors[$field_name] = $error_msg;
    }
}
return $errors;
}

function safe($str) { return htmlentities(strip_tags($str)); }

?>

<head>

<script type="text/javascript" src="js/productFormValidation.js"></script>

</head>

<body>

<div class="contact_links">
<form name="contact" method="post" action="/sendmail/send-mail-start.php" enctype="multipart/form-data" onsubmit="return checkForm(this);">


                            <label>Name: (required) </label><input class="input1" id="name" name="name" type="text" value="" />


                            <label>Email: (required) </label><input class="input1" id="email" name="email" type="text" value="" /><br />


                            <label>Phone: (required) </label><input class="input1" id="phone" name="phone" type="text" value="" />
                            <label>Company: (required)  </label><textarea class="input2" name="comments" id="comments" cols="" rows="1"></textarea><br />
                            <input type="image" src="images/individualProducts/submit.png" alt="" value="" class="submit" />


                            </form>  

<!-- INDIVIDUAL CONTACT LINK ENDS --></div>

</body>

&#34;行动&#34;页:

<?php

    $date1=date("F d,Y");

    $nameField=$_POST['name'];
    $companyField=$_POST['company'];
    $countryField=$_POST['country'];
    $stateField=$_POST['state'];
    $emailField=$_POST['email'];
    $phoneField=$_POST['phone'];
    $urlField=$_POST['url'];



    $messageField=nl2br($_POST['comments']);


    $body=" 

    $body is followed by the table setup which contains the code. Basically just font-specifications, padding etc.

   //$from=$firstNameField;
   $sub="Contact Form - From the Start Page".$titleField;

   $name=$firstNameField."< ".$emailField." >";
   $to="info@mysite.com";

    if (mail($to,$sub,$body,"From:".$name."\nContent-Type: text/html; charset=iso-8859-1"))
    {
    print "<meta http-equiv=\"refresh\" content=\"3;URL=/start.php\">";
    }
    else{
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.php\">";
    }

?>

然后是HTML,基本上感谢他们的联系。所以这些是涉及的脚本。

如果我自己创建了网站,我可以自己实施CAPTCHA,只需找到正确的指南并按照步骤操作即可。不幸的是,其他人组织了这个邮件结构,我被迫使用我不完全理解的设置 - 我也没有学会理解。我得到语法错误,我不确定在哪里粘贴代码等。

我需要一个能够看到我所掌握的内容,了解正在发生的事情的人,帮助我实施一个简单的垃圾邮件解决方案,以防止烦人的僵尸邮件发生。

此外 - 由于其尺寸和阅读困难,reCaptcha不是一种选择。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

一个快速(但不完美)的解决方案是添加一个机器人会填写的隐藏字段(称之为“用户名”并用CSS隐藏它),如果此字段包含内容,则取消提交。这至少会删除很多垃圾邮件提交。

您的表单看起来像这样:

<form name="contact" method="post" action="/sendmail/send-mail-start.php" enctype="multipart/form-data" onsubmit="return checkForm(this);">

  <label>Name: (required)</label>
  <input class="input1" id="name" name="name" type="text" value="" />

  <label class="hidethis">Username: (required)</label>
  <input class="input1 hidethis" id="username" name="username" type="text" value="" />

  <label>Email: (required)</label>
  <input class="input1" id="email" name="email" type="text" value="" />
  <br />
  <label>Phone: (required)</label>
  <input class="input1" id="phone" name="phone" type="text" value="" />
  <label>Company: (required) </label>
  <textarea class="input2" name="comments" id="comments" cols="" rows="1">
  </textarea>
  <br />
  <input type="image" src="images/individualProducts/submit.png" alt="" value="" class="submit" />
</form>

/sendmail/send-mail-start.php会这样开始:

<?php
  if($_POST['username']!= "") {die("No spam");}
  $date1=date("F d,Y");
  $nameField=$_POST['name'];
  $companyField=$_POST['company'];
  $countryField=$_POST['country'];
  ... // Rest of your code

答案 1 :(得分:0)

为了防止垃圾邮件机器人在我的网站上滥用我的表单,我使用了一个相对简单的技巧(顺便提一下:http://www.sitepoint.com/easy-spam-prevention-using-hidden-form-fields/);首先,为每个表单添加一个额外的输入字段,例如:

<span class="hide"><label>Username: (required) </label><input name="Username" type="text" value="" /></span>

然后使用CSS隐藏字段(这就是我将其包裹在span中的原因);垃圾邮件机器人通常会忽略CSS,因此他们不会注意到它的隐藏:

.hide { display: none; }

最后但并非最不重要的是,检查PHP代码(在电子邮件中发送数据之前!)是否在有人提交表单时填写了新的输入字段,例如:

if ($_POST['Username']) {
    echo('F*** off you nasty spam-bot.');
    return false;
}

到目前为止还不完美,但它给了我很多帮助^^

答案 2 :(得分:0)

除了此处其他答案中提到的隐藏字段外,您还可以在提交按钮中添加禁用属性,然后使用javascript在文档就绪时启用它。

这主要是因为大多数机器人都没有启用javascript。此外,为了阻止那些,你可以设置1-2秒超时,然后删除&#39;禁用&#39;属性。