防止机器人表单提交

我正试图找出一种防止机器人提交表单的好方法,同时保持流程简单。 我已经阅读了几个很棒的想法,但我想在提交表单时添加一个确认选项。 用户单击“提交”并弹出一个需要用户交互的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; } 

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

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

所以,你可以做什么?

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

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

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

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

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

尽管如此,只是在提供相同的感谢页面时默默地丢弃请求(或者在响应垃圾邮件表单时引入延迟,如果你想要报复 – 这可能无法阻止他们压倒你的服务器,它甚至可能让他们不堪重负通过保持更长时间的连接打开,您的速度更快。此时,您需要硬件解决方案,负载平衡器设置上的防火墙)。

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

有关Captcha的更新

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

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

reCaptcha坏了吗?
实用的,非图像的Captchas
如果我们知道CAPTCHA可以被击败,为什么我们仍然使用它们?
是否有使用CAPTCHA图像的真正替代方案?
一个黑客三人如何让谷歌的reCaptcha瘫痪 – 更有趣的是因为它是关于音频的Captchas。

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

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

我做了以下事情:

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

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

有问题的机器人显然没有处理javascript,因此我不再看到任何垃圾邮件。 对于一个人(打开了javascript),它的工作没有任何不便或额外的互动。 如果访问者关闭了javascript,他会在提交时收到明确的消息。

您的代码不会阻止机器人提交但不是因为您的代码是如此。 典型的机器人将更有可能对URL( action属性)执行外部/自动POST请求。 典型的机器人不会呈现HTML,CSS或JavaScript。 他们正在阅读HTML并对其进行操作,因此任何客户端逻辑都不会被执行。 例如,CURLing URL将获得标记而无需加载或评估任何JavaScript。 可以创建一个查找

的简单脚本,然后使用匹配的键对该URL执行CURL POST。

考虑到这一点,需要一个防止机器人提交的服务器端解决方案。 Captcha + CSRF应该足够了。 ( http://en.wikipedia.org/wiki/Cross-site_request_forgery

您只需将validationcaptcha添加到表单即可。 由于validation码将是different ,也在images ,机器人无法decode 。 这是所有wesites最广泛使用的安全之一……

您可以测量提供的注册时间,无需填写永久文本框!

你无法通过javascript实现目标。 因为客户端可以解析您的JavaScript并绕过您的方法。 您必须通过validation码在服务器端进行validation。 主要思想是在服务器端存储一个秘密,并在服务器端validation从客户端提交的表单和秘密。

No Realy你还在想Captcha或ReCap是否安全?

机器人现在很聪明,可以轻松识别图像上的字母使用OCR工具(搜索它来理解)

我说保护自己免受自动表单提交的最佳方法是每次显示提交表单时添加生成的隐藏哈希值(并存储在当前客户端服务器上的会话中)!

这就是当Bot或任何Zombie提交表单时,你检查它是否给定哈希等于会话存储哈希;)

了解更多信息了解CSRF

我遇到了一个表单输入validation,阻止了程序输入的注册。

我最初的策略是抓住元素并将其设置为我想要的选项。 我触发了对输入字段的关注以及对每个元素的模拟点击以获得显示的下拉菜单,然后设置触发事件以更改值的值。 但是当我尝试单击保存未注册为已更改的输入时。

  ;failed automation attempt because window doesnt register changes. ;$iUse = _IEGetObjById($nIE,"InternalUseOnly_id") ;_IEAction($iUse,"focus") ;_IEAction($iUse,"click") ;_IEFormElementOptionSelect($iUse,1,1,"byIndex") ;$iEdit = _IEGetObjById($nIE,"canEdit_id") ;_IEAction($iEdit,"focus") ;_IEAction($iEdit,"click") ;_IEFormElementOptionSelect($iEdit,1,1,"byIndex") ;$iTalent = _IEGetObjById($nIE,"TalentReleaseFile_id") ;_IEAction($iTalent,"focus") ;_IEAction($iTalent,"click") ;_IEFormElementOptionSelect($iTalent,2,1,"byIndex") ;Sleep(1000) ;_IEAction(_IETagNameGetCollection($nIE,"button",1),"click") 

这让我重新思考如何通过直接操纵鼠标的动作来输入输入,以模拟鼠标类型行为的更多选择。 毋庸置疑,我不必手动上传1张图片来更新公司的产品图片。 在字母前使用windows编号将我的脚本放在目录的末尾,当弹出图像上传窗口时,我必须使用主动辅助function从窗口获取syslistview并选择第2个元素,即第1个元素是文件夹的图片。 或者findfirstfile中的第一个元素只返回文件调用。 我使用名称来搜索项目数据库中的项目,然后在上传图像后访问这些项目并更新一些属性,然后我将文件从该文件夹移动到另一个文件夹,这样就不会再次处理它移动到列表中的下一个第一个文件并循环,直到更新结束时找到脚本名称。

只需分享一个低数据录入人员如何节省时间,并与所有这些邪恶forms的validation检查作斗争。

问候。

这是一个非常短的版本,自4年前在我的网站上实现以来,随着时间的推移随着需要增加了差异。 这可以使用所需的所有变量和if else语句构建

  function spamChk() { var ent1 = document.MyForm.Email.value var str1 = ent1.toLowerCase(); if (str1.includes("noreply")) { document.MyForm.reset(); }  

我实际上今天来到这里是为了找到如何将特定的垃圾邮件机器人IP地址重定向到HELL ..只是为了好玩