Facebook 和 Twitter 等网站在注册期间如何防止机器人入侵?我的意思是,注册表单上根本没有验证码?
我想为一个项目创建一个注册表单,我不希望在注册过程中出现机器人,而且验证码通常很难看..
编辑: 我的问题实际上是在注册期间,因为我知道 Facebook 在第一次注册后使用验证码。
Facebook 使用某种隐藏的垃圾邮件保护,如果您查看注册表单的来源,您会看到如下内容:
class="hidden_elem"><div class="fsl fwb">Security Check</div>This is a standard security test that we use to prevent spammers from creating fake accounts and spamming users.
因此,当 javascript 认为您是机器人时,捕获变得可见。
几乎没有什么方法可以让机器人在不捕获的情况下更难完成注册,比如填写表格的时间、鼠标点击事件的发起者等。表单中还有基于随机会话的值(以防止直接提交而无需先下载表单)
也有些人使用隐藏的表单元素,例如“电子邮件”,在 css 中的样式是不可见的,但常见的简单机器人会尝试填写所有表单字段,因此如果这个隐藏元素有任何值,你可以阻止它们
twitter 和 fb 花了很多时间开发阻止垃圾邮件发送者的技术,我认为他们不会将其公开,因为这对他们打击垃圾邮件发送者会适得其反。
但是你可以从 fb 或 twitter 下载所有客户端的 JavaScript,如果你愿意的话可以研究它们,因为大多数保护将发生在客户端而不是服务器上。
服务器只能发出一些随机会话变量,检查请求中的有效标头,总时间等。它真的很有限。
在用户填写表单时,一些网站还在服务器和客户端之间使用 ajax 交换,主要是为了让机器人开发人员更难进行模拟的虚假数据交换。
无论如何,不幸的是,哪里没有简单的解决方案来做体面的保护,特别是没有验证码或某种问题
此外,对于提交按钮,您可以使用图像映射而不是按钮,您可以使用 PHP 中的 GDI 之类的东西在随机位置动态创建带有提交按钮图像的大图像,并使用 css 仅显示该图像的一部分与实际按钮,并在服务器端检查鼠标点击位置的 X 和 Y 位置,这对于机器人来说很难破解。除非他们使用真正的浏览器并且只是模拟键盘和鼠标。无论如何,正如我不幸所说的那样,哪里没有简单的解决方案。
一种方法是将验证发送到用户的电子邮件地址或手机并获得验证(因此在这种情况下,您必须每个帐户只允许一个电子邮件地址或手机)
另一种选择是使用“ Negative CAPTCHA ”或“ Honeypot Captcha ”
我不知道 Facebook 和 Twitter 是如何做到的,但如果你想创建一些简单且不影响网站美观的东西,我知道有些网站只是要求用户输入一个简单数学问题的答案,例如“什么是 2 + 3?”。这不是最安全的方法,但这只是一个想法。
好吧,您也可以随时部署硬件解决方案来创建第 4-7 层防火墙规则。您可以创建特定规则来查找爬网机器人的知名代理。但是,要停止新创建的机器人,您需要知道他们为机器人使用的代理。
由于您不需要 CAPTCHA,您可以使用 Keypic - keypic.com - 这是一种隐形保护,不需要 CAPTCHA。对于任何 Web 表单,它都是一种有效的反垃圾邮件方法。网站用户没有通过任何对网站有利的测试,因为它提高了用户体验的质量,从而提高了用户参与度。解决方案是一种专家系统,它分析用户的行为并检查数据库,然后得出请求是来自合法用户还是机器人的结论。顺便说一句,Twitter 和 Facebook 仍然使用 CAPTCHA 进行密码验证,这在这种保护的效率方面是一个非常有争议的方法。
我在注册我的任天堂网站时遇到了大量机器人的问题,所以我在注册页面上放了一张马里奥的图片(确保图像数据中没有任何内容显示“马里奥”),并附有文字“这是谁?回答总而言之。” 从那以后就没有一个机器人注册。不确定这是否真的是一个好的解决方案,不确定机器人有多聪明。我有点惊讶它奏效了。
理论上它可能会阻止一些合法用户,但很难想象任天堂网站的许多合法用户不知道马里奥是谁......