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

问题描述 投票:40回答:3
How do we get rid of these spambots on our site?

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

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

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


更新:

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

forms spam-prevention honeypot
3个回答
91
投票

概念

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

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或上传列表来报告已知的spambot IP。 (例如CloudFlare)请通过报告您找到的所有垃圾邮件和垃圾邮件IP,帮助使互联网成为更安全的地方。

高级

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

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

9
投票

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

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

有关详细信息,请访问How to Turn Off Form Autocompletion

希望这可以帮助。

她:)


5
投票

我们发现这里的建议略有(但很简单)变化,使我们的联系表格蜜罐的有效性产生了巨大的差异。简而言之,将隐藏字段更改为文本输入,并使机器人认为它是密码。像这样的东西:

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

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

这一显然是微不足道的变化导致我们的垃圾邮件大幅下降。

© www.soinside.com 2019 - 2024. All rights reserved.