我读过可以通过使用 JS 以必须设置的形式创建一个复选框来阻止机器人(即http://uxmovement.com/forms/captchas-vs-spambots-why-the-checkbox-captcha-wins /)。这个策略有效吗?用户是否需要物理检查该框,还是可以使用客户端JS来检查它?
2 回答
这篇文章对我来说似乎很可疑。复选框验证码似乎是对盲目填写表格的垃圾邮件机器人的一种不错的防御,对他们碰巧所在的网站一无所知,但是如果有人正在编写一个对您的页面有任何洞察力的机器人,那么好处就到此为止了。
最后,重要的是 HTTP 帖子。如果 POST 可以被服务器验证,那么 POST 是如何创建的或者客户端上可能运行了什么脚本并不重要。如果服务器正在寻找一个名为 的 POST 值NotABot
,它的值等于1
,垃圾邮件机器人可以简单地将这个值包含在它自己的 POST 中,因为服务器不知道复选框是否是通过客户端脚本创建的。如果该值必须等于初始 HTML 中提供的随机值,垃圾邮件机器人也可以抓取该值。如果该值必须与图像上提供的值匹配,那么您基本上已经创建了一个验证码。
最后,这是一个成本/收益分析,取决于您对垃圾邮件的风险承受能力与您对可用性的渴望。运行一个较小的网站,也许每个帖子都可以在被允许之前由人工审核。也许您不会收到足够的垃圾邮件来保证可用性下降。如果您正在运行一个被数百万人使用的大型网站,那么可能需要采取更积极的措施来抵御机器人。这真的是你的电话。
对于不显眼的方法,最好的选择是混淆。也就是说,假设一个邪恶的垃圾邮件公司雇佣某人来弄清楚如何为你的网站编写一个机器人(99% 的时间不会发生,除非你为数百万用户提供服务),你需要成功尽可能多地浪费时间来了解您网站的幕后情况。
我曾经在我的网站的访客评论中有机器人,所以我决定过火。(我的网站上需要 Javascript。禁用它的人中很少有人通常是机器人或 Web 开发人员)
- 我不使用表单标签,并且总是将随机数量的 CSS 隐藏的虚拟提交按钮与真正的提交按钮混合在一起。
- 由于提交的是 Javascript/ajax,这已经过滤掉了一堆非专业的机器人。
- 我创建了一些通过 CSS 隐藏的文本输入(不是 input type="hidden"),并且像“电子邮件”和机器人通常寻找的其他关键字一样适当地命名。
- 如果这些都被填写并提交给服务器,我可以假设它是一个机器人。
- 机器人需要了解仅填写某些字段。
- 我与服务器的界面需要一个隐藏的验证码(用户不可见),由客户端加扰。
- 服务器将随机验证码字符串传递给客户端。
- 客户端使用 Javascript 函数根据 DOM 的一部分的日期、评论长度和字符串光栅化对验证码进行加扰,并将加扰的验证码传回服务器进行验证。
- 服务器实现相同的功能。
- 黑客当然可以窃取或以其他方式引用此 Javascript 函数,因此我有 10 个左右不同的加扰函数,这些函数根据用户的会话在随机 URL 上交换和引用。
- 具有空用户代理字符串的客户端不允许添加评论或以其他方式更新站点。
- 该网站不会明显拒绝怀疑来自机器人的评论,而是给出一条消息,即评论/等将在几个小时内出现。(事实并非如此。对他们撒谎!)
- 如果有人正在查看我的 Javascript 源代码,我最喜欢的另一件事是使用jsfuck.com方法来混淆它的某些部分。如果他们知道它是什么,它不会阻止任何人,但我喜欢想象他们看到混淆代码时的表情。
- 检查文本区域/输入以查看是否在其中触发了 keydown 事件。
- 总而言之,这并不能阻止任何人雇用人员访问您的网站以在其上发送垃圾邮件。因此,完全复制并粘贴到 textareas 中的评论被标记为可疑,并在它们出现之前被标记以供审查。
- 具有该 IP 的用户在接下来的一小时内发表的所有后续评论也会被标记为待审核,并且不会立即显示。
- 超过 1 个链接的评论会被标记为待审核。尽管大多数机器人现在已经意识到许多网站上的这种限制,并且不会贪婪地使用链接。