如何在表单中添加Honey pot字段?

我一直在阅读有关在我的表格中添加蜂蜜jar字段以打击机器人/垃圾邮件的信息。 唯一的问题是他们没有指南或任何从何处开始。 许多网站都说要创建一个隐藏的字段,只有垃圾邮件机器人会填写。 但是,由于我是新手,不知道我将在我的应用程序中从哪里开始。 谁能给我关于如何设置它的建议? 我想让我的Devise注册页面使用蜜jar字段。

蜜jarvalidation码背后的基本思想是你有一个名为“form”或“email”或“c​​ontent”的隐藏(通过CSS)字段(对于只读取字段名称的机器人)看起来应该填写。然后,当服务器查看提交时,您确保这些隐藏字段为空。 如果不是,那么您将post标记为机器人。

这是一个很好解释的例子 (在ASP中有一些代码), 这里是一个提供蜜jarvalidation码的Rails Gem。

我链接的Rails Gem看起来好像一旦安装就很容易使用:

  <% form_tag comments_path, :honeypot => true do -%> ... <% end -%> 

虽然如果你有兴趣了解这种方法而不仅仅是实施它,我建议你自己动手。 如果你自己滚动,重要的是要确保该字段被CSS(或其他一些样式/定位技巧) input type="hidden"而不是input type="hidden" – 否则机器人可能无法填写该字段。

正如Michael Mior在评论中指出的那样,在隐藏字段旁边留言告诉用户将其留空是很重要的 – 否则屏幕阅读器用户可能会错误地将其填入。我链接到的gem中缺少此function – 因此,如果您正在建立一个可访问的网站(您几乎肯定应该这样做),您可能需要修改它或滚动自己的网站。


请记住,这个技巧并非万无一失 – 没有什么可以阻止机器人渲染页面并确定哪些字段在填充之前实际上对用户可见 – 但是那种机器人会比看起来那么复杂。在表格html。 蜜jarvalidation码可能非常有效地阻止简单的机器人。

 HTML -  PHP Validation - if(strlen($_POST['verifyEmail']) > 0){ header('location: {some redirect URL here..}'); //Send them way away from your form :) die(); //Stop execution of the script } CSS - #verifyEmail{ position:fixed; visibility: hidden; top:-500px; left:-500px; } 

dislplay: none; 不显示HTML中的机器人(尝试使用视图源) visibility: hidden; left:-500px; top:-500px; visibility: hidden; left:-500px; top:-500px; (查看源时显示)

我使用display:none honey pots一段时间,然后切换到可见性选项,当我发现该字段未在源代码中显示时。 使用CSS中的类或id,而不是内联样式。 用标签通知用户是个好主意,并且名称不是那么重要,因为大多数机器人通常会填写所有字段。

如果与基本的数学validation码一起使用,绝对不是一个非常有效的捕获。

尝试invisible_captcha (支持Rails 3,4和5)。

它适用于中小型(流量方面)站点,具有简单灵活的方法。 它还提供时间敏感的提交。

基本用法

在你的forms:

 <%= form_for(@topic) %> <%= invisible_captcha %> ... <% end %> 

在你的控制器中:

 class TopicsController < ApplicationController invisible_captcha only: [:create, :update] ... end 
 
If you see this, leave it blank. Only bots should see this

这是我的蜜jar:

  

如果您仍然偏执,请尝试更多方法:一旦用户错误地填写了值并使用javascript来清除该字段,并将焦点放在下一个文本框上。 您还可以要求用户进行简单的数学运算,例如回答:1 + 2 =?