我必须防止机器人向帐户创建页面发送垃圾邮件请求(根据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遇到可访问性问题,确定的攻击者可以跳过蜜罐字段