防止机器人表单提交

Mik*_*ike 25 javascript forms security jquery spam

我正试图找出一种防止机器人提交表单的好方法,同时保持流程简单.我已经阅读了几个很棒的想法,但我想在提交表单时添加一个确认选项.用户单击"提交"并弹出一个需要用户交互的Javascript确认提示.

这会阻止机器人或者机器人能够解决这个问题吗?下面是代码和JSFIddle来演示我的想法:

的jsfiddle

$('button').click(function () {
  if(Confirm()) {
    alert('Form submitted');
    /* perform a $.post() to php */
  }
  else {
    alert('Form not submitted');
  }
});

function Confirm() {
  var _question = confirm('Are you sure about this?');
  var _response = (_question) ? true : false;
  return _response;
}
Run Code Online (Sandbox Code Playgroud)

Pat*_*k M 66

这是很多人遇到的一个问题.正如pst所指出的,机器人可以直接向服务器提交信息,绕过javascript(参见cURLPostman等简单实用程序).许多机器人现在能够使用javascript消费和交互.Hari krishnan指出使用验证,其中最普遍和最成功的(据我所知)是reCaptcha.但验证码存在问题,并且受到万维网纲要的劝阻,主要是出于无效和无法访问的原因.

为免我们忘记,攻击者总是可以部署人工智能来击败验证码.有些故事是攻击者为了垃圾邮件的目的而为人们付费而无需工作人员意识到他们参与非法活动.亚马逊提供一种名为Mechanical Turk的服务,可以解决这类问题.如果您将他们的服务用于恶意目的,亚马逊会极力反对,并且它具有花钱和创建纸质记录的缺点.但是,有更多的erhm提供商不会有这样的反对意见.

所以,你可以做什么?

我最喜欢的机制是隐藏的复选框.让它有一个标签,如"你同意使用我们服务的条款和条件吗?" 甚至可能链接到一些看起来很严肃的术语.但你默认它取消选中并通过css隐藏它:将它放在页面外,将它放在一个零高度或零宽度的容器中,用一个更高的z-index在顶部放置一个div.在这里滚动您自己的机制并发挥创意.

秘诀是没有人会看到复选框,但大多数机器人通过检查页面并直接操作它来填充表格,而不是通过实际视觉.因此,任何带有该复选框值集的表单都可以让您知道它没有被人填充.这种技术称为机器人陷阱.自动填充机器人类型的经验法则是,如果一个人必须为了克服一个单独的站点而进行调解,那么他们就会失去他们通过传播他们所做的所有钱(以他们的时间形式)垃圾广告.

(之前的经验法则假设你正在保护一个论坛或评论表.如果实际的钱或个人信息在线,那么你需要比一个启发式更多的安全性.这仍然是通过默默无闻的安全性,它只是证明了默默无闻足以保护您免受偶然的脚本攻击.不要欺骗自己认为这可以保护您的网站免受所有攻击.)

秘密的另一半是保留它.如果选中此框,请勿以任何方式更改响应.之后显示相同的确认,谢谢,或任何消息或页面.这将阻止机器人知道它已被拒绝.

我也是计时方法的粉丝.您必须完全在服务器端实现它.以持久的方式(主要是会话)跟踪页面的服务时间,并将其与表单提交的时间进行比较.这可以防止伪造甚至让机器人知道它被定时 - 如果您将服务时间作为服务时间的一部分表单或javascript,然后你让他们知道你正在接受他们,邀请更复杂的方法.

再次,虽然,只是同时服务于同一感谢页面丢弃该请求(或在应对垃圾邮件的形式引入的延迟,如果你想报复 - 这可能不会让他们从不让您的服务器,它甚至可以让他们压倒通过保持更长的连接打开更长时间,您可以更快.此时,您需要硬件解决方案,负载平衡器设置上的防火墙).

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

有关Captcha的更新

关于计算机视觉和表单提交的主题,我一直在考虑更新这个问题.最近发表的一篇文章向我指出了计算机视觉爱好者史蒂夫希克森的博客文章.Snapchat(显然是一些社交媒体平台?我从来没有使用它,每天感觉老了......)推出了一个新的类似验证码的系统,你需要识别包含幽灵的图片(漫画,真的).史蒂夫证明了这并不能证明提交者的蹲坐,因为通常情况下,计算机在识别这种简单类型的图像时会更好,更快.

不难想象将类似方法扩展到其他Captcha类型.我做了一个搜索,发现这些链接也很有趣:

reCaptcha坏了吗?
实用的,非基于图像的Captchas
如果我们知道CAPTCHA可以被击败,为什么我们仍在使用它们?
是否有使用CAPTCHA图像的真正替代方案?
黑客三人如何让谷歌的reCaptcha陷入困境 - 因为它与音频Captchas有关,因此非常有趣.

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

  • 哇,谢谢你的信息.我已经阅读了有关预防机器人的方法,并且大多数建议使用CAPTCHA,但最近我一直在读人们说CAPTCHA不会在不久的将来出现.这给了我可以研究的信息,谢谢. (6认同)

Mag*_*nus 5

今天我成功阻止了我的表单的连续垃圾邮件。当然,这种方法可能并不总是有效,但它很简单,并且适用于这种特殊情况。

我做了以下事情:

  • 我将表单的 action 属性设置为mustusejavascript.asp它只显示一条消息,表明提交无效并且访问者必须启用 javascript。

  • 我将表单的 onsubmit 属性设置为一个 javascript 函数,该函数将表单的操作属性设置为真正的接收页面,例如receivemessage.asp

有问题的机器人显然不处理 javascript,所以我不再看到来自它的任何垃圾邮件。对于人类(打开了 javascript)来说,它完全没有任何不便或额外的交互。如果访问者关闭了 javascript,他将在提交时收到明确的消息。