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

Better Honeypot Implementation (Form Anti-Spam)

How do we get rid of these spambots on our site?

每个站点都会在某个时候成为 spambots 的受害者。你如何处理它会影响你的客户,大多数解决方案都会阻止一些人填写你的表格。

这就是蜜罐技术的用武之地。它允许您忽略垃圾邮件机器人,而无需强迫您的用户填写验证码或跳过其他环节来填写您的表单。

这个post纯粹是为了帮助别人在他们的网站表单上实施蜜罐陷阱。


更新:

自从在我客户的所有网站上实施以下蜜罐后,我们已成功拦截 99.5%(数千次提交)的所有垃圾邮件。那是不使用 "advanced" 部分中提到的技术,这些技术将很快实现。

概念

通过在您的表单中添加一个只有垃圾邮件机器人可以看到的不可见字段,您可以诱使他们表明他们是垃圾邮件机器人而不是实际的最终用户。

HTML

<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">

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

  • 被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
}

回退

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

报告

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

高级

如果您真的需要打击更高级的垃圾邮件机器人,您还可以做一些额外的事情:

  • 纯JS隐藏蜜罐字段而不是普通的CSS
  • 使用您实际不使用的真实表单输入名称。 (例如 "phone" 或 "website")
  • 在蜜罐算法中加入表单验证。 (大多数最终用户只会弄错 1 或 2 个字段;垃圾邮件机器人通常会弄错大部分字段)
  • 使用像 CloudFlare 这样的服务自动阻止已知的垃圾邮件 IP
  • 有表单超时,并防止即时发布。 (在页面加载后 3 秒内提交的表单通常是垃圾邮件)
  • 防止任何 IP 每秒发布一次以上。
  • 如需更多想法,请查看此处:How to create a "Nuclear" honeypot to catch form spammers

一个真正强制no-autocompletion的建议:
autocomplete="off" 更改为 autocomplete="nope"autocomplete="false"

由于给定值无效(autocomplete 的值仅为 onoff),浏览器将停止尝试填充该字段。

更多详情,How to Turn Off Form Autocompletion

希望对您有所帮助。

SYA:)

我们发现,对此处的建议进行细微(虽然简单)的改动,会对我们的联系表单蜜罐的有效性产生巨大的影响。简而言之,将隐藏字段更改为文本输入,让机器人认为这是密码。像这样:

<input type="text" name="a_password" style="display:none !important" tabindex="-1" autocomplete="off">

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

这个看似微小的变化导致我们的垃圾邮件急剧减少。