概念
通过在您的表单中添加一个只有垃圾邮件机器人才能看到的不可见字段,您可以诱骗他们透露他们是垃圾邮件机器人而不是实际的最终用户。
HTML
<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">
这里我们有一个简单的复选框:
- 用 CSS 隐藏。
- 有一个不起眼但显然是假的名字。
- 具有等效于 0 的默认值。
- 无法通过自动完成填写
- 无法通过Tab键导航到。(见标签索引)
服务器端
在服务器端,我们要检查该值是否存在并且是否具有非 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 隐藏蜜罐字段
- 使用您实际上不使用的真实表单输入名称。(例如“电话”或“网站”)
- 在蜜罐算法中包含表单验证。(大多数最终用户只会弄错 1 或 2 个字段;垃圾邮件机器人通常会弄错大部分字段)
- 使用 CloudFlare 等自动阻止已知垃圾邮件 IP 的服务
- 有表单超时,并防止即时发布。(在页面加载后 3 秒内提交的表单通常是垃圾邮件)
- 防止任何 IP 每秒发布一次以上。
- 有关更多想法,请查看此处:如何创建“核”蜜罐以捕获垃圾邮件发送者