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

unr*_*eal 22 captcha spam-prevention

我想阻止垃圾邮件发送者使用我的网站.但我觉得CAPTCHA非常讨厌.我不只是在谈论"键入文本"类型,而是需要用户浪费时间来证明自己是人类的任何东西.

我能在这做什么?

vas*_*lis 22

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

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

<input type="text" id="not_human" name="name" />
<input type="text" name="actual_name" />
<style>
   #not_human { display: none }
</style>
Run Code Online (Sandbox Code Playgroud)

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

  • 这不也可以过滤使用自动填表的人的邮件吗? (4认同)
  • @codingjoe内联样式基本上总是一个坏主意,无论它们的用途如何.是的,垃圾邮件机器人很容易忽略具有内联样式`display:none`的字段. (2认同)
  • **@ GFoley83****+ 1**确切地说,而且不仅仅是*内联样式.*仅仅是为了测试,我使用的形式每天收到大约50封垃圾邮件.甚至在style.css中设置`input [name = email]:display:none;`用于多汁命名的字段,如`<input name ="email"id ="email"type ="text">`**没有阻止**机器人继续发送电子邮件,而只是使用`position:absolute; 左:-9000px;`**做了伎俩**.可能(出于同样的原因)也不是最好但是有效.只是分享我的发现. (2认同)
  • 您可以使用属性 autocomplete="off" 禁用自动完成 (2认同)

Mik*_*las 14

集成Akismet API以自动过滤用户的帖子.


Hen*_*idv 14

我结合了一些到目前为止看起来非常成功的方法:

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

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

  3. 然后检查GET参数的数量是否与您预期的一样.如果您的表单操作是POST并且提交页面的基础URL是index.php?p=guestbook&sub=submit,则您需要2个GET参数.机器人尝试添加GET参数,因此此检查将失败.

  4. 最后,检查是否设置了HTTP_USER_AGENT,哪些机器人有时没有设置,以及HTTP_REFERER是表单页面的URL.机器人有时只是POST到提交页面,导致HTTP_REFERER成为其他东西.

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

  • 你的**(1.)**被证明是坏的!这是正确的`name ="email"`是垃圾邮件机器人的一个很好的目标,但是`display:none;`没有用.取而代之的是:`位置:绝对; 左:-9000;`!只是分享. (7认同)

p.c*_*ell 6

如果您正在寻找 .NET 解决方案,Ajax Control Toolkit 有一个名为 NoBot 的控件

NoBot 是一个控件,它试图提供类似 CAPTCHA 的机器人/垃圾邮件预防,而无需任何用户交互。NoBot 具有完全隐形的好处。NoBot 可能与低流量站点最相关,其中博客/评论垃圾邮件是一个问题,并且不需要 100% 的有效性。

NoBot 采用了几种不同的反机器人技术:

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

Jacques-Louis Chereau 在 NoBot 上的这篇博文中有更多讨论和演示。

<ajaxToolkit:NoBot
  ID="NoBot2"
  runat="server"
  OnGenerateChallengeAndResponse="CustomChallengeResponse"
  ResponseMinimumDelaySeconds="2"
  CutoffWindowSeconds="60"
  CutoffMaximumInstances="5" />
Run Code Online (Sandbox Code Playgroud)


Sam*_*Day 5

我会小心使用 CSS 或 Javascript 技巧来确保用户是真正的现实生活中的人,因为您可能会引入可访问性问题、跨浏览器问题等。更不用说垃圾邮件机器人可能相当复杂,因此使用可爱的小 CSS 显示技巧可能无论如何都行不通。

我会研究 Akismet。

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

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

  • 此外,一些垃圾邮件发送者在印度和中国使用廉价劳动力而不是机器人。 (4认同)