2013-05-31 39 views
4

试图从联机表单中过滤出垃圾邮件。我有一个输入的隐藏div。这个想法是,如果有东西进入现场,表单会将用户标识为bot并拒绝提交。试图实施这种方法后,机器人仍然通过。我不是很熟悉JavaScript(或垃圾邮件过滤,对于这个问题) - 这里就是我的工作:蜜罐实施

HTML(表格内):

<form action="#" method='post' id='vsurvey' name='defer'> 
<div id="hp-div"> 
    If you see this, leave this form field blank 
    and invest in CSS support. 
    <input type="text" name="question_20579" value="" /> 
</div> 
<input type="submit" value="Submit Request" /> 
</form> 

CSS:

#hp-div { display: none } 

JS:

<script type="text/javascript" charset="ISO-8859-1" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 

<script type="text/javascript" charset="ISO-8859-1" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 

<script type="text/javascript"> 
if(!String.IsNullOrEmpty(Request.Form["question_20579"])) 
    IgnoreComment(); 
</script> 

<![if !IE]> 
    <script type="text/javascript"> 
     $(document).ready(function(){ 
      $("#vsurvey").validate({ 
       invalidHandler: function(form, validator) { 
        var errors = validator.numberOfInvalids(); 
        if (errors) { 
         var message = errors == 1 
          ? 'Oops! You missed 1 field. It has been highlighted' 
          : 'Oops! You missed ' + errors + ' fields. They have been highlighted below'; 
         $("div.alert span").html(message); 
         $("div.alert").show(); 
        } else { 
         $("div.alert").hide(); 
        } 
       }, 
       errorPlacement: function(error, element) { 
        return true; 
       } 
      }) 
     }); 
    </script> 
<![endif]> 
+0

一些垃圾邮件机器人能够检测该字段是隐藏的,而不是填充它。 –

+0

而不是将其设置为“display:none;”将它放置在原本不可见的位置 - 放在屏幕的另一侧,位于另一个Node的下面等。您需要考虑某些用户使用“Tab”导航控件,但。也许还可以考虑捕获'keydown'或'keyup'并将另一个隐藏字段标记为“user typed” –

+0

[** fiddle **](http://jsfiddle.net/Vh5xX/)来解释我在最新评论中的含义。 –

回答

10

在我看来,一个蜜罐应包括所有的下面:

  • 字段由CSS隐藏
  • 由JavaScript
  • 需要空白输入
  • 需要特定输入

例如一个字段字段隐藏字段:

<div class="input-field"> 
    Please leave this blank 
    <input type="text" name="contact" value="" /> 
</div> 
<div class="text-field"> 
    Please do not change this field 
    <input type="text" name="email" value="[email protected]" /> 
</div> 
使用CSS,隐藏第一个字段:
.input-field { display: none; } 

使用jQuery,隐藏第二场:

$('.text-field').hide(); 
// or 
$('.text-field').addClass('hide'); 

然后在PHP中几个非常简单的检查:

if($_POST['contact'] == '' && $_POST['email'] == '[email protected]') { 
    // Not a bot 
}