Javascript 蜜罐实现

Javascript 蜜罐实现,javascript,spam-prevention,honeypot,Javascript,Spam Prevention,Honeypot,试图从在线表单中过滤垃圾邮件。我有一个带输入的隐藏div。这样做的想法是,如果某个内容进入该字段,表单会将用户标识为bot,并拒绝提交。在尝试实现此方法后,机器人程序仍能通过。我对javascript(或垃圾邮件过滤)不是很熟悉——以下是我的工作内容: html(在表单中): js: 如果(!String.IsNullOrEmpty(Request.Form[“question20579”])) 忽略注释(); $(文档).ready(函数(){ $(“#vsurvey”).validate(

试图从在线表单中过滤垃圾邮件。我有一个带输入的隐藏div。这样做的想法是,如果某个内容进入该字段,表单会将用户标识为bot,并拒绝提交。在尝试实现此方法后,机器人程序仍能通过。我对javascript(或垃圾邮件过滤)不是很熟悉——以下是我的工作内容:

html(在表单中):

js:


如果(!String.IsNullOrEmpty(Request.Form[“question20579”]))
忽略注释();
$(文档).ready(函数(){
$(“#vsurvey”).validate({
invalidHandler:函数(表单、验证器){
var errors=validator.numberOfInvalids();
如果(错误){
var message=errors==1
?“哎呀!您错过了1个字段。它已高亮显示”
:'Oops!您遗漏了'+errors+'字段。它们已在下面突出显示';
$(“div.alert span”).html(消息);
$(“div.alert”).show();
}否则{
$(“div.alert”).hide();
}
},
errorPlacement:函数(错误,元素){
返回true;
}
})
}); 

在我看来,蜜罐应该包括以下所有内容:

  • 由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="your@email.com" />
</div>
使用jQuery隐藏第二个字段:

$('.text-field').hide();
// or
$('.text-field').addClass('hide');
然后在PHP中进行两个非常简单的检查:

if($_POST['contact'] == '' && $_POST['email'] == 'your@email.com') {
  // Not a bot
}

一些垃圾邮件机器人可以检测到该字段是隐藏的,而不是将其填充。而不是使其
显示:无位置,否则它将是不可见的——在屏幕的另一边,在另一个节点的下方。等等,你需要考虑一些用户使用<代码> Tab <代码>来导航控件。也可以考虑捕获<代码>键下<代码>或<代码> KEYUP 并标记一个不同的隐藏字段作为“用户类型”来解释我在最后评论中的意思。@未收集的-是的,这是真的。然而,在我的例子中,即使他们填写了,他们也能通过。我想弄清楚为什么会这样,关于我的特定代码。@blackessej你能再展示一点代码吗?完整的表单和发布输入的代码?Spambots可能禁用了JavaScript,因此如果你的表单可以在没有JS的情况下发布,那么评论仍然会通过。这似乎是偶尔的升级投票,因此值得补充的是,现在我只使用reCAPTCHA而不是蜜罐解决方案。
<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="your@email.com" />
</div>
.input-field { display: none; }
$('.text-field').hide();
// or
$('.text-field').addClass('hide');
if($_POST['contact'] == '' && $_POST['email'] == 'your@email.com') {
  // Not a bot
}