防止bot表单提交

我正试图找出一个好方法,防止机器人提交我的表单,同时保持过程简单。我读过几个好主意,但我想在提交表单时添加一个确认选项。用户单击submit,弹出一个Javascript确认提示,需要用户交互

这会阻止机器人吗?或者机器人会很容易解决这个问题吗?下面是演示我的想法的代码和JSFIDLE:

JSFIDLE

$(“按钮”)。单击(函数(){
if(Confirm()){
警报(“提交的表格”);
/*对php执行$.post()*/
}
否则{
警报(“未提交表格”);
}
});
函数确认(){
var_question=confirm('你确定吗?');
var _response=(_问题)?true:false;
返回响应;
}

这是很多人都遇到过的一个问题。正如user166390在评论中指出的那样,bot可以绕过javascript直接向服务器提交信息(请参阅cURL和Postman等简单实用程序)。现在很多机器人都能够使用javascript并与之交互。Hari krishnan指出了captcha的使用,据我所知,其中最流行和最成功的是reCaptcha。但是验证码也有其问题,并且被《万维网简编》所阻止,主要原因是无效性和不可访问性

为了避免我们忘记,攻击者总是可以部署人类智能来击败验证码。有这样的故事,攻击者付钱让人们破解密码,用于垃圾邮件目的,而工人们却没有意识到他们参与了非法活动。亚马逊提供了一个名为Mechanical Turk的服务,可以解决类似的问题。如果你将他们的服务用于恶意目的,亚马逊会极力反对,而且这样做的缺点是花钱和创建书面记录。然而,还有更多的erhm提供商不会对此表示反对

那你能做什么呢

我最喜欢的机制是隐藏复选框。让它有一个像“你同意使用我们服务的条款和条件吗?”这样的标签,甚至可以链接到一些严肃的条款。但您可以将其默认为未选中并通过css隐藏:将其放置在页面外,将其放置在高度为零或宽度为零的容器中,在其顶部放置一个具有更高z索引的div。在这里滚动您自己的机制并发挥创意

秘密在于没有人会看到复选框,但是大多数机器人通过检查页面并直接操作来填写表单,而不是通过实际的视觉。因此,任何带有该复选框值集的表单都允许您知道它不是由人填写的。这种技术被称为机器人陷阱。自动填表机器人的经验法则是,如果一个人必须调解以克服一个单独的站点,那么他们就失去了传播垃圾邮件广告所能赚到的所有钱(以他们的时间为单位)

(前面的经验法则假设您正在保护论坛或评论表单。如果实际金钱或个人信息在线,那么您需要更多的安全性,而不仅仅是一种启发。这仍然是通过隐蔽性实现的安全性,只是证明隐蔽性足以保护您免受偶然的脚本攻击。不要欺骗自己考虑到这可以保护您的网站免受所有攻击。

保密的另一半是保密。如果复选框被选中,则不要以任何方式更改响应。随后显示相同的确认、谢谢或任何消息或页面。这将防止bot知道它已被拒绝

我也是计时方法的粉丝。你必须完全在服务器端实现它。以持久的方式跟踪页面的服务时间(基本上是会话)并将其与表单提交的时间进行比较。这可以防止伪造,甚至让机器人知道它正在计时——如果你将服务时间作为表单或javascript的一部分,那么你就让他们知道你在关注他们,从而引入更复杂的方法

不过,在服务相同的感谢页面时,只需默默地放弃请求即可(或者,如果你想报复的话,在响应垃圾邮件表单时引入延迟-这可能不会阻止他们压倒你的服务器,甚至可能让他们更快压倒你,让更多的连接保持更长的开放时间。在这一点上,你需要一个硬件解决方案,负载平衡器上的防火墙设置)

关于延迟服务器响应以减慢攻击者的速度,有很多资源,通常以暴力密码尝试的形式。这个IT安全问题看起来是一个很好的起点

关于验证码的更新

关于计算机视觉和表单提交的话题,我一直在考虑更新这个问题。最近出现了一篇文章,指出我是计算机视觉爱好者Steve Hickson的这篇博文。Snapchat(显然是一些社交媒体平台?我从未使用过它,每天都感觉老了…)推出了一个新的类似验证码的系统,你必须识别包含鬼魂的图片(卡通,真的)。史蒂夫证明,这并不能验证提交者的身份,因为在典型的方式中,计算机在识别这种简单类型的图像方面更好更快

不难想象将类似的方法扩展到其他验证码类型。我进行了搜索,发现这些链接也很有趣:

雷帕查坏了吗?
实用的、非基于图像的验证码
如果我们知道CAPTCHA可以被击败,为什么我们仍在使用它们?
除了使用验证码图像,还有其他选择吗?
三名黑客如何让谷歌的reCaptcha屈服——特别有趣,因为这是关于音频验证码的

哦,如果没有强制性的XKCD漫画,我们几乎不可能完整

发表评论