防止机器人在没有验证码的情况下滥发注册信息


Preventing bots from spamming registrations without captchas

我必须防止机器人向帐户创建页面发送垃圾邮件请求(根据HTTP帖子请求),但我不想使用captchas,也无法访问他们的IP(这是一项tor隐藏服务)。

顺便说一句,我不能使用javascript(tor浏览器)。有什么合理的方法可以做到这一点吗?

另一种解决方案是使用蜜罐:

  • 在表单中添加表单字段,并将其隐藏在访问者视图中(例如,将其放置在屏幕外)
  • 添加一个tekst,通知访问者(屏幕阅读器…)将字段留空
  • Bot很可能会填充所有表单字段
  • 放弃所有已填写蜜罐字段(非空)的表单提交

如果它是一个机器人,那么POST请求很可能(但不是绝对的)是根据表单参数预先手工制作的。在这种情况下,您可以在一个隐藏的输入中生成一个随机数,您将在POST时从"他的"会话/cookie/任何东西中验证该数字。

不过,最好的解决方案仍然是captcha。

也许您希望做的最好的事情就是测量在注册的输入框中键入的速度。人类需要"有限的时间",而机器人基本上需要"没有时间"(尽管他们可以很快发现你在寻找并适应)。但这样的度量需要运行"一些"客户端代码。

或者,你可以给表单名称(用户看不见)起疯狂的名字:调用表单字段,人们必须在其中键入自己的名字"ZIP",很多机器人会在那里输入一个数字。

您可以向表单中添加不应修改的空白或预填充表单元素:

<form method="post" action="createaccount.php">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="email" name="email" value="" placeholder="Leave me blank!" style="display: none;" />
    <input type="submit" name="submit" />
</form>

然后在您的php:中

<?php
    if($_POST["email"] != "")
    {
        die("You must be a bot!");
    }
?>

如果机器人理解css,这种方法就不能很好地工作。

更多信息请点击此处:http://www.landauer.at/preventing-spam-in-form-submissions-without-using-a-captcha/

MFA就是答案。我遇到了类似的问题,最终使用谷歌验证器使用MFA(多因素身份验证)。Captcha和蜜罐只是让它变得困难,但并不能解决问题。Captcha遇到可访问性问题,确定的攻击者可以跳过蜜罐字段