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)
大多数机器人将填充第一个字段,因此您可以阻止它们.
Hen*_*idv 14
我结合了一些到目前为止看起来非常成功的方法:
提供带有名称的输入字段email并使用CSS隐藏它
display: none.提交表单时,检查此字段是否为空.机器人倾向于填充虚假的电子邮件地址.
提供另一个隐藏的输入字段,其中包含页面加载的时间.检查加载和提交页面之间的时间是否大于填写表单所需的最短时间.我使用5到10秒.
然后检查GET参数的数量是否与您预期的一样.如果您的表单操作是POST并且提交页面的基础URL是index.php?p=guestbook&sub=submit,则您需要2个GET参数.机器人尝试添加GET参数,因此此检查将失败.
最后,检查是否设置了HTTP_USER_AGENT,哪些机器人有时没有设置,以及HTTP_REFERER是表单页面的URL.机器人有时只是POST到提交页面,导致HTTP_REFERER成为其他东西.
我从http://www.braemoor.co.uk/software/antispam.shtml和http://www.nogbspam.com/获得了我的大部分信息.
如果您正在寻找 .NET 解决方案,Ajax Control Toolkit 有一个名为 NoBot 的控件。
NoBot 是一个控件,它试图提供类似 CAPTCHA 的机器人/垃圾邮件预防,而无需任何用户交互。NoBot 具有完全隐形的好处。NoBot 可能与低流量站点最相关,其中博客/评论垃圾邮件是一个问题,并且不需要 100% 的有效性。
NoBot 采用了几种不同的反机器人技术:
Jacques-Louis Chereau 在 NoBot 上的这篇博文中有更多讨论和演示。
<ajaxToolkit:NoBot
ID="NoBot2"
runat="server"
OnGenerateChallengeAndResponse="CustomChallengeResponse"
ResponseMinimumDelaySeconds="2"
CutoffWindowSeconds="60"
CutoffMaximumInstances="5" />
Run Code Online (Sandbox Code Playgroud)
我会小心使用 CSS 或 Javascript 技巧来确保用户是真正的现实生活中的人,因为您可能会引入可访问性问题、跨浏览器问题等。更不用说垃圾邮件机器人可能相当复杂,因此使用可爱的小 CSS 显示技巧可能无论如何都行不通。
我会研究 Akismet。
此外,您可以在验证用户数据的方式上发挥创意。例如,假设您有一个需要用户电子邮件和地址的注册表单。在验证电子邮件地址的方式上,您可能非常严格,甚至可以确保域实际设置为接收邮件,并且该域上有一个与提供的邮箱相匹配的邮箱。您还可以使用 Google Maps API 尝试对地址进行地理定位并确保其有效。
为了更进一步,您可以实现“硬”和“软”验证错误。如果邮件地址与正则表达式验证字符串不匹配,那么这是一个严重的失败。无法检查域的 DNS 记录以确保它接受邮件或邮箱存在,是“软”失败。当您遇到软故障时,您可以要求进行 CAPTCHA 验证。这有望减少您必须推动 CAPTCHA 验证的次数,因为如果您在网站上获得足够的活动,则至少在某些时候,有效人员应该输入有效数据!
| 归档时间: |
|
| 查看次数: |
20062 次 |
| 最近记录: |