对抗表单垃圾邮件的 5 种方法
发布于 作者: Eric L. Barnes
创建应用程序后,迟早会遇到垃圾邮件机器人攻击。这是不可避免的。
在我的一款项目中,注册表单遭到攻击,最终导致了 17,000 多个假用户,清理起来非常麻烦。作为处理流程的一部分,我在 Twitter 上询问其他人是如何在没有验证码的情况下对抗机器人和防止表单垃圾邮件的,收到了很多回复,其中包含许多很棒的想法。我想分享所有提到的方法,这样如果您遇到攻击,就知道如何反击。
- Cloudflare
如果您使用的是 Cloudflare 之类的服务,可以利用它们的“页面规则”设置来锁定带有表单提交的 URL。
我不认为这和其他的方法一样有效,但如果您已经使用该服务,它可以快速实现,而且不会造成任何伤害。
- 蜜罐
蜜罐是第一道防线,设置起来非常容易。它们在这种情况下的工作方式是添加一个隐藏的表单输入,该输入永远不应该有值,然后在提交表单时,如果该隐藏字段有值,则表明它很可能是来自机器人。
您可以自己实现,但也有像 蜜罐这样的软件包,可以轻松集成。
只需记住,如果您自己创建输入字段,请使用看起来合法的名称,这样机器人会认为这是应该填写的内容。
- 验证电子邮件
如果您的表单需要电子邮件,例如用于新用户注册,那么您可以验证电子邮件是否真实存在,并确认他们是否点击了电子邮件中的按钮以确认注册。很多新闻通讯(包括我们每周的 Laravel 新闻通讯)都是使用此方法工作的。
您输入您的电子邮件。我们使用的服务会向您发送一封电子邮件。您点击确认。然后您就成为了订阅者。
这有助于确保他们确实想要注册,而不是机器人或某个人的恶意注册。
另一种类似的方法是使用像 identibyte这样的服务,它会通过其 API 验证电子邮件。这可以避免让用户进行额外的步骤。
- 验证码
这是我最不喜欢的方法,因为我真的很讨厌验证码。谷歌有 不可见 reCAPTCHA,这可能是最好的验证码选项。
- 专用垃圾邮件服务
两个主要的垃圾邮件服务是 WordPress 的 Akismet 和 Stop Forum Spam。Akismet 是付费服务,Stop Forum Spam 是免费服务。
我在我运行的每个 WordPress 网站上都广泛使用了 Akismet,但您也可以将其用于任何应用程序,包括 Laravel。您只需要调用它们的 API 或者使用现有的页面,例如 nickurt/laravel-akismet。
Stop Forum Spam 是一项免费服务,听起来类似于 Akismet,也有像 nickurt/laravel-stopforumspam这样的 Laravel 软件包,可以帮助进行集成。
- 使用验证码阻止垃圾邮件
最后一道防线通常是验证码和 reCAPTCHA,现在有些服务不再需要将您的用户视为机器人。我们在 reCAPTCHA 软件包 教程中汇总了一些可用的服务。
***
在所有这些方法中,我建议从蜜罐开始,如果无效,则继续使用其他方法,直到阻止机器人攻击您的表单。请记住,今天有效的方法可能明天就不行了,所以这将永远是一场战斗。