更好的蜜罐实施(形式反垃圾邮件)

Nic*_*ers 49 forms spam-prevention honeypot

我们如何在我们的网站上摆脱这些垃圾邮件?

在某些时候,每个网站都成为垃圾邮件的牺牲品.如何处理它会影响您的客户,大多数解决方案可能会阻止某些人填写您的表单.

这就是蜜罐技术的用武之地.它允许你忽略垃圾邮件而不强迫你的用户填写验证码或跳过其他篮球来填写你的表格.

这篇文章纯粹是为了帮助其他人在他们的网站表单上实现蜜罐陷阱.


更新:

自从在我所有客户的网站上实施以下蜜罐以来,我们已成功阻止了99.5%(数千份提交)的所有垃圾邮件.这是不使用"高级"部分中提到的技术,这将很快实施.

Nic*_*ers 95

概念

通过在表单中​​添加一个只有spambots可以看到的不可见字段,您可以欺骗它们以显示它们是垃圾邮件而不是实际的最终用户.

HTML

<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">
Run Code Online (Sandbox Code Playgroud)

这里我们有一个简单的复选框:

  • 用CSS隐藏.
  • 有一个不起眼但明显假的名字.
  • 默认值等于0.
  • 无法通过自动完成填充
  • 无法通过Tab密钥导航到.(见tabindex)

服务器端

在服务器端,我们要检查值是否存在并且值是否为0,如果是,则适当地处理它.这包括记录尝试和所有提交的字段.

在PHP中它可能看起来像这样:

$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool) $_REQUEST['contact_me_by_fax_only'] == TRUE) {
    $honeypot = TRUE;
    log_spambot($_REQUEST);
    # treat as spambot
} else {
    # process as normal
}
Run Code Online (Sandbox Code Playgroud)

倒退

这是日志的来源.如果您的某个用户最终被标记为垃圾邮件,您的日志将帮助您恢复任何丢失的信息.它还允许您研究在您的网站上运行的任何机器人,如果将来修改它们以规避您的蜜罐.

报告

许多服务允许您通过API或上传列表来报告已知的spambot IP.(例如CloudFlare)请通过报告您找到的所有垃圾邮件和垃圾邮件IP,帮助使互联网变得更安全.

高级

如果你真的需要打击一个更高级的spambot,你可以做一些额外的事情:

  • 纯粹使用JS而不是纯CSS隐藏honeypot字段
  • 使用您实际不使用的实际表单输入名称.(例如"电话"或"网站")
  • 在蜜罐算法中包含表单验证.(大多数最终用户只会得到1或2个字段错误;垃圾邮件通常会导致大部分字段错误)
  • 使用CloudFlare等自动阻止已知垃圾邮件IP的服务
  • 有表格超时,并防止即时发布.(在页面加载的3秒内提交的表单通常是垃圾邮件)
  • 防止任何IP每秒发布超过一次.
  • 有关更多想法,请查看此处:如何创建"核"蜜罐以捕获形式垃圾邮件发送者

  • "默认值等于0",但示例值为"1"?这是有意的吗? (13认同)
  • @DaviddCeFreitas - 复选框值为"1".但是如果用户选中该框,它只会提交该值.机器人将检查框,php将读取"1"作为布尔值TRUE并检测机器人. (3认同)
  • @edank有了这个限制,例如,如果他们只查看不是`display:none`,`visibility:hidden`或`opacity:0`的字段,他们将找不到任何不在的表单最初呈现页面时的屏幕(这非常常见),更不用说大多数机器人甚至都没有获取css/js文件(为什么他们只关心HTML` <form>`元素) .因此,尽管他们**可以尝试检测蜜罐的css,但这根本不值得.检测到什么是"可见的"实际上有很多并发症,但我刚才说的是最常见的原因. (2认同)
  • 既然你已经用 display:none (或 CSS)隐藏了它,那么 tabindex=-1 不会变得多余吗?即隐藏字段无论如何都不能被标记?我担心 tabindex=-1 会给机器人一个很好的简单方法来找到你的蜜罐字段是什么! (2认同)
  • 将 css 更改为 display:none 可能被认为不是未来的证明 - 潜在的未来机器人将能够检测内联的 css。也许更好的选择是实现一个类名不明显的类并使用样式表。垃圾邮件机器人必须下载正确的表格,并“猜测”哪个类名适用于特定的表单。或者,使用 javascript 来“隐藏”输入将使这更具未来性 - 请参阅 yodarunamok 的实现。 (2认同)
  • @DannyF 请先阅读整个答案和评论,然后再提出改进建议。这一切都已经涵盖了。此外,这个答案从尽可能基本的开始,然后提出改进建议。这样做是为了尽可能降低进入壁垒,同时仍然提供尽可能多的信息。 (2认同)

Leb*_*Cit 10

一个真正强制非自动完成的建议:通过OR
改变autocomplete="off"autocomplete="nope"autocomplete="false"

由于给定值不是有效值(autocomplete仅为on或的值off),浏览器将停止尝试填充该字段.

有关更多详细信息,请参阅如何关闭表单自动完成.

希望这可以帮助.

SYA :)


yod*_*mok 7

我们发现,此处建议的轻微(尽管很简单)变化对我们的联系方式蜜罐的有效性产生了巨大的影响。简而言之,将隐藏字段更改为文本输入,并使该漫游器认为它是密码。像这样:

<input type="text" name="a_password" style="display:none !important" tabindex="-1" autocomplete="off">
Run Code Online (Sandbox Code Playgroud)

您会注意到,此模拟密码输入与复选框示例保持相同的基本准则。是的,文本输入(而不是实际的密码输入)似乎可以正常工作。

这种明显的细微变化导致我们的垃圾邮件数量急剧下降。

  • @deflime 该字段的目的是让机器人填写它,从而通知我们该请求是垃圾邮件。文本字段蜜罐的想法是使其对机器人有吸引力(而密码字段则不太如此。)也就是说,因为我不知道机器人是如何编码的,所以我无法具体说明为什么会这样作品。如果您自己做一些测试,我会对您的发现感兴趣。 (2认同)