防止垃圾邮件和机器人使用JavaScript生成的复选框

6
2个回答

6
这篇文章对我来说有些可疑。复选框验证码似乎是一种不错的防止垃圾邮件机器人盲目填写表单的方法,但是如果有人编写了一个对你的页面有任何洞察力的机器人,那么它的好处就到此为止了。
最终,唯一重要的是HTTP POST。如果服务器可以验证POST,则POST的创建方式或客户端可能运行的脚本并不重要。如果服务器正在查找名为“NotABot”的POST值,并且其值等于“1”,则垃圾邮件机器人可以在自己的POST中包含此值,因为服务器不知道复选框是否通过客户端脚本创建。如果该值必须等于初始HTML中提供的随机值,则垃圾邮件机器人也可以抓取该值。如果该值必须与图像上提供的值匹配,则您基本上已经创建了CAPTCHA。
最终,这是一种成本/效益分析,取决于您对垃圾邮件和可用性的风险容忍度。运行较小的网站,也许每个帖子都可以由人员进行审核,然后才允许发布。也许您不会遇到足够多的垃圾邮件,以使减少可用性变得必要。如果您运行着一个被数百万人使用的巨大网站,也许需要更积极的措施来防止机器人。这真的取决于您的决定。

谢谢Mike,关于页面加载和包含带有随机值的隐藏输入,JS执行并启动ajax将隐藏输入的值发送到服务器,并检索第二个值等于第一个值的哈希值,然后将其放入另一个隐藏输入中(或者第一个隐藏输入不需要但存储在会话中?)。在表单提交时,服务器检查正确的值? - user1032531
所有这些都只是通过混淆来实现安全。可以编写脚本仍然自动完成所有操作。阅读您发布的文章中的评论,其中许多评论非常有见地。共识似乎是这些技术可以最小化某些类型的垃圾邮件,但不能消除所有垃圾邮件。 - Mike Christensen
谢谢你们两位。不幸的是,我不够重要,所以幸运的是没有人会编写专门针对我的机器人,我只需要采取合理的措施。为此,我将包括一个隐藏蜜罐和从渲染到提交的最短时间。此外,“如果”客户端使用JS,那么我将使用复选框验证码,否则我将使用reCAPTCHA。原始问题仍然存在:我可以让JS自动检查添加的复选框吗?谢谢! - user1032531
1
@user1032531 - 如果是这样的话,就不要考虑复选框了。只需使用JavaScript创建一个值为“NotABot”的隐藏输入字段即可提供与复选框完全相同的保护措施,而且不需要用户做任何事情。 - Mike Christensen
2
如果有人设计了一个机器人来攻击你的网站,那么以上提到的解决方案都无济于事。不过,显然你做得很好,让别人想要攻击你的网站,所以生活肯定不会太糟糕。在这种情况下,你只能使用验证码、电子邮件验证、某种引荐服务等方式来限制机器人的攻击。 - user1032531
显示剩余4条评论

6
您在 IT 技术方面需要翻译的内容中提到了一种不引人注目的方法,即混淆。也就是说,假设恶意垃圾邮件公司雇佣某人来为您的网站编写机器人(99%情况下不会发生,除非您服务数百万用户),您需要尽可能地使其难以理解您网站底层的运作,并浪费更多时间。

我的网站曾经有垃圾评论机器人,因此我决定过度保护。(我的网站需要 JavaScript。很少有人禁用它,通常是机器人或网站开发人员)

  1. 我不使用表单标签,并且总是将随机数量的CSS隐藏虚拟提交按钮与真实的提交按钮混合在一起。
    • 由于提交是通过Javascript/ajax完成的,这已经过滤掉了许多非特定的机器人。
  2. 我创建了一些通过CSS隐藏(而不是input type="hidden")并且命名得当的文本输入框,例如“电子邮件”和其他机器人通常查找的关键字。
    • 如果填写并提交到服务器,则可以假定它是一个机器人。
    • 机器人需要理解只填写某些字段。
  3. 我的与服务器的接口需要一个隐藏的验证码代码(对用户不可见),由客户端进行混淆。
    • 服务器向客户端传递一个随机的验证码字符串。
    • 客户端使用一个基于日期、评论长度和DOM部分的字符串光栅化的Javascript函数来混淆验证码,并将混淆后的验证码传回服务器进行验证。
    • 服务器实现相同的功能。
    • 黑客当然可以窃取或引用此Javascript函数,因此我有大约10个不同的混淆函数,根据用户会话在随机化的URL上交换和引用。
  4. 空用户代理字符串的客户端不允许添加评论或更新网站。
  5. 网站不会明显拒绝疑似来自机器人的评论,而是给出一条消息,表示评论/等待将在几小时内出现。 (实际上并不会。欺骗他们!)
  6. 如果有人查看我的Javascript源代码,我最喜欢使用jsfuck.com方法混淆其中的部分。如果他们知道这是什么,它并不能阻止任何人,但我喜欢想象他们看到混淆代码时的表情。
  7. 检查文本区域/输入框是否触发了keydown事件。
  8. 总的来说,这并不能阻止任何人雇佣一个人访问您的网站进行垃圾邮件。因此,完全复制并粘贴到文本区域中的评论被标记为可疑,并在出现之前进行了标记。
    • 来自具有该IP的用户的所有后续评论在接下来的一小时内也会被标记并且不会立即显示。
  9. 超过1个链接的评论将被标记进行审核。尽管现在大多数机器人都意识到许多网站对此限制,并且不会贪心地插入链接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接