没有验证码就阻止垃圾邮件

时间:2010-09-18 23:26:55

标签: captcha spam-prevention

我想阻止垃圾邮件发送者使用我的网站。但我觉得CAPTCHA非常讨厌。我不只是谈论“打字”这类型,而是要求用户浪费时间证明自己是人类的任何事情。

我可以在这做什么?

9 个答案:

答案 0 :(得分:23)

要求 Javascript发布数据会阻止相当数量的垃圾邮件机器人,同时不会干扰大多数用户。

你也可以使用一个漂亮的技巧:

<input type="text" id="not_human" name="name" />
<input type="text" name="actual_name" />
<style>
   #not_human { display: none }
</style>

大多数机器人会填充第一个字段,因此您可以阻止它们。

答案 1 :(得分:15)

整合Akismet API以自动过滤用户的帖子。

答案 2 :(得分:13)

我结合了迄今为止看起来非常成功的一些方法:

  1. 提供名为email的输入字段,并使用CSS隐藏它 display: none。提交表单时,请检查此字段是否为 空。机器人倾向于填充虚假的电子邮件地址。

  2. 提供另一个隐藏的输入字段,其中包含页面的时间 已加载。检查加载和提交页面之间的时间 填写表单所需的最短时间越长。我用 5到10秒之间。

  3. 然后检查GET参数的数量是否与您预期的一样。 如果您的表单操作是POST和您的基础URL 提交页面是index.php?p=guestbook&sub=submit,然后是你 期望2个GET参数。 Bots尝试添加GET参数 检查会失败。

  4. 最后,检查是否设置了HTTP_USER_AGENT,哪些机器人有时不设置, 并且HTTP_REFERER是表单页面的URL。机器人 有时只是POST到提交页面导致HTTP_REFERER 成为别的东西。

  5. 我从http://www.braemoor.co.uk/software/antispam.shtmlhttp://www.nogbspam.com/获得了大部分信息。

答案 3 :(得分:4)

我会小心使用CSS或Javascript技巧来确保用户是真正的真实人类,因为您可能会引入可访问性问题,跨浏览器问题等。更不用说垃圾邮件机器人可能相当复杂,因此使用可爱无论如何,小的CSS显示技巧甚至可能无法正常工作。

我会调查Akismet。

此外,您可以在验证用户数据的方式上发挥创意。例如,假设您有一个需要用户电子邮件和地址的注册表单。您可以在验证电子邮件地址方面相当硬,甚至可以确保域实际设置为接收邮件,并且该域上的邮箱与提供的邮箱相匹配。您还可以使用Google Maps API尝试对地址进行地理定位并确保其有效。

为了更进一步,您可以实现“硬”和“软”验证错误。如果邮件地址与正则表达式验证字符串不匹配,那么这是一个很难的失败。无法检查域的DNS记录以确保它接受邮件,或者邮箱存在,是“软”失败。当您遇到软故障时,您可以请求CAPTCHA验证。这有望减少您必须推送CAPTCHA验证的次数,因为如果您在网站上获得足够的活动,有效的人应该至少在某些时间输入有效数据!

答案 4 :(得分:4)

如果您正在寻找.NET解决方案,请Ajax Control Toolkit has a control named NoBot

  

NoBot是一种控件,它试图在不需要任何用户交互的情况下提供类似CAPTCHA的僵尸/垃圾邮件防范。 NoBot具有完全隐形的好处。 NoBot可能与博客/评论垃圾邮件存在问题并且不需要100%有效性的低流量站点最相关。

NoBot采用了一些不同的反机器人技术:

  • 强制客户端的浏览器执行可配置的JavaScript计算并验证结果作为回发的一部分。 (例如:计算可能是一个简单的数字计算,或者也可能涉及DOM以确保涉及浏览器)
  • 在请求表单和回发表单之间执行可配置的延迟。 (例如:人类不可能在不到两秒的时间内完成表格)
  • 对每单位时间每个IP地址的可接受请求数实施可配置限制。 (例如:人类不可能在一分钟内提交相同的表格超过五次)

在此blogpost by Jacques-Louis Chereau on NoBot进行更多讨论和演示。

<ajaxToolkit:NoBot
  ID="NoBot2"
  runat="server"
  OnGenerateChallengeAndResponse="CustomChallengeResponse"
  ResponseMinimumDelaySeconds="2"
  CutoffWindowSeconds="60"
  CutoffMaximumInstances="5" />

答案 5 :(得分:1)

我意识到这是一个相当古老的帖子,但是,我遇到了一个名为“honey-pot captcha”的有趣解决方案,它易于实现且不需要javascript:

提供隐藏文本框!

  • 大多数spambots会很乐意完成隐藏文本框,让您礼貌地忽略它们。
  • 您的大多数用户甚至都不会知道其中的差异。

要防止有屏幕阅读器的用户掉入您的陷阱,只需在文本框中标记“如果您是人类,请留空”或其他相关内容。

多田!非侵入式垃圾邮件拦截!这是文章:

http://www.campaignmonitor.com/blog/post/3817/stopping-spambots-with-two-simple-captcha-alternatives

答案 6 :(得分:0)

由于极难以100%避免,我建议阅读2年前发布的this IBM article标题为'Real Web 2.0:Battling Web spam',其中访问者行为和控制工作流程分析得很简洁< / p>

  

网络垃圾邮件有多种形式,包括:

     
      
  • 在wiki上发送垃圾文章和破坏文章
  •   
  • 在Weblogs上评论垃圾邮件
  •   
  • 论坛,问题跟踪器和其他讨论网站上的垃圾邮件发布
  •   
  • 推荐人垃圾邮件(当垃圾邮件网站假装将用户引荐至目标时)   列出引荐人的网站
  •   
  • 社交网络上的虚假用户条目
  •   
     

处理Web垃圾邮件非常困难,但是Web开发人员   忽视他或她的垃圾邮件预防   后果自负。在这篇文章中,在一篇文章中   我要介绍的是后来的第二部分   技术,技术和服务   打击各种网络垃圾邮件。

除了电子邮件之外,还链接了一个非常有趣的“ ... hashcash technique,用于最大限度地减少Wiki上的垃圾邮件。

答案 7 :(得分:0)

当然你应该选择一件Honeypot或BOTCHA。

答案 8 :(得分:0)

一个人类可读的问题如何告诉用户在第一个名字字段和姓氏字段的最后一个字母或类似内容中输入值的第一个字母?

或者显示一些隐藏的字段,这些字段填充了JavaScript,其值为referer等等。检查这些字段与之前存储在会话中的字段是否相等。 如果值为空,则用户没有javascript。那就不是垃圾邮件了。但机器人至少会填补其中一些。