如何防止机器人自动填写表格?


105

我正在尝试提出一种足够好的反垃圾邮件机制,以防止自动生成的输入。我已经读过验证码,1 + 1 =?东西工作正常,但它们还提出了一个额外的步骤,阻碍了该应用程序的免费快速使用(我并不是在寻找类似的东西)。

我试过在所有表单中设置一些隐藏字段,display: none; 但是,我确定可以配置一个脚本来跟踪该表单字段ID,而不必填充它。

您是否实施/知道了一种良好的反自动表格填充机器人方法?有什么可以通过HTML AND / OR服务器端处理无缝完成的,并且(几乎)是防弹的吗?(如果没有JS,可以将其禁用)。

我正在尝试不依赖会话(例如,计算单击一次按钮以防止过载的次数)。


5
感谢您不需要验证码解决方案!IMO,表单垃圾邮件是网站所有者面临的一个问题,防止它不是用户应承担的负担。如此处的答复所证明的,我们可以在网站端处理垃圾邮件的方法太多了。需要用户交互的方法只能由懒惰或新手使用。
Mike

Answers:


73

一种易于实现但并非万无一失的解决反垃圾邮件的方法(特别是针对“特定”攻击)是跟踪表单提交和页面加载之间的时间。

机器人请求页面,解析页面并提交表单。很快

人们输入URL,加载页面,等待页面完全加载,向下滚动,阅读内容,决定是否评论/填写表格,需要时间填写表格并提交。

时间上的差异可能很小。以及如何在不使用cookie的情况下跟踪这段时间需要某种方式的服务器端数据库。这可能会影响性能。
另外,您需要调整阈值时间。


9
请注意是否要允许最终用户使用自动填充表格,例如addons.mozilla.org/en-US/firefox/addon/1882,它可以允许快速提交。除了验证码之外,任何使最终用户烦恼的事情通常也不是一件好事,尤其是在防止急躁的人快速走动时。
雪花2010年

1
好点,但这全取决于上下文。如果该表单是登录表单,我完全同意您的看法。但是,为什么要禁用从机器人登录?如果上下文是注释框,例如StackOverflow上的注释框,我肯定知道:如果在注释框上使用自动填充,则说明您是垃圾邮件发送者。请注意,如果将自动填充用于签名,则仍然需要时间才能真正键入内容。
达朱2010年

5
请注意,SO会执行类似的操作。连续或多次编辑评论,您将看到“您是人类吗?” 页。
雅各布·博格

2
黑客不会总是要求表单。有时,精心设计的URL(使用GET或POST)足以毫不费力地多次发布表单。
手工艺者2013年

1
用验证码实现。如果表单提交速度太快,请提供验证码以让真正的用户通过。
Yashovardhan99 2017年

75

实际上,我发现一个简单的Honey Pot字段效果很好。大多数漫游器会填写他们看到的每个表单字段,希望避开所需的字段验证器。

http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

如果您创建一个文本框,把它藏在JavaScript,然后验证值是空白的服务器上,这杂草出机器人的99%在那里,做你的用户不会造成99%的任何在所有的挫折。剩下的1%禁用了javascript的人仍会看到文本框,但是对于这种情况,您可以添加一条消息,例如“将此字段留空”(如果您完全关心它们)。

(此外,请注意,如果您在字段上执行style =“ display:none”,那么对于机器人来说,仅看到它并丢弃该字段就太容易了,这就是为什么我更喜欢javascript方法的原因)。


1
您是否认为机器人实际上经过了css文件并认为它显示为:none; ?我真的不希望使用基于JS的解决方案,因为可以轻松禁用它。
Gal

1
对于网站管理员来说,这似乎是一个古老的解决方案,其中包括大量无关的关键字,以提高他们的网站排名。我认为像Google这样的搜索爬虫机器人会发现它的显示为:none。为什么其他机器人无法做到这一点?
雪花2010年

2
我现在已经在两个受到抨击的站点上使用了此技术,并且两个站点的机器人注册现在都为零。它无助于针对性攻击,但大多数人只是在寻找漏洞利用或垃圾邮件。
nirvdrum 2011年

25
小不点这里:避开JS的问题,只是使用CSS来定位你的蜜罐输入上面的页面顶部-这种方式将是确定有JS禁用,并得到周围的机器人必须能够解析CSS绝对定位,并就是否是蜜罐做出常识性决定。这样子就可以多一点防弹:)
totallyNotLizards 2011年

3
@ alexy13是的,它更简单,但是正如答案中所指出的,对于机器人来说,只需测试一个CSS属性,它也很容易弄清楚您要做什么。但是,如果您使用绝对定位策略,则机器人必须解析所有定位规则大多数元素父级的规则,以便能够确定输入是否可见,然后确定是否还是不对这些信息采取行动-这比大多数(如果不是全部)机器人的价值还大。
totallyNotLizards 2013年

22

如果-机器人根本找不到任何东西form怎么办?

3个例子:

  1. 使用AJAX插入表单
  • 如果您对禁用了JS并且无法查看/提交表单的用户表示满意,则可以通知他们,并让他们首先使用noscript语句启用Javascript:
<noscript>
  <p class="error">
    ERROR: The form could not be loaded. Please enable JavaScript in your browser to fully enjoy our services.
  </p>
</noscript>
  • 创建一个form.html并将您form放置在一个<div id="formContainer">元素内。

  • 在您需要调用该表单的页面内,请使用一个空白<div id="dynamicForm"></div>和以下jQuery:$("#dynamicForm").load("form.html #formContainer");

  1. 完全使用JS构建表单

// THE FORM
var $form = $("<form/>", {
  appendTo : $("#formContainer"),
  class    : "myForm",
  submit   : AJAXSubmitForm
});

// EMAIL INPUT
$("<input/>",{
  name        : "Email", // Needed for serialization
  placeholder : "Your Email",
  appendTo    : $form,
  on          : {        // Yes, the jQuery's on() Method 
    input : function() {
      console.log( this.value );
    }
  }
});

// MESSAGE TEXTAREA
$("<textarea/>",{
  name        : "Message", // Needed for serialization
  placeholder : "Your message",
  appendTo    : $form
});

// SUBMIT BUTTON
$("<input/>",{
  type        : "submit",
  value       : "Send",
  name        : "submit",
  appendTo    : $form
});

function AJAXSubmitForm(event) {
  event.preventDefault(); // Prevent Default Form Submission
  // do AJAX instead:
  var serializedData = $(this).serialize();
  alert( serializedData );
  $.ajax({
    url: '/mail.php',
    type: "POST",
    data: serializedData,
    success: function (data) {
      // log the data sent back from PHP
      console.log( data );
    }
  });
}
.myForm input,
.myForm textarea{
  font: 14px/1 sans-serif;
  box-sizing: border-box;
  display:block;
  width:100%;
  padding: 8px;
  margin-bottom:12px;
}
.myForm textarea{
  resize: vertical;
  min-height: 120px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="formContainer"></div>

  1. 诱饵输入
  • 机器人喜欢(真的很喜欢)漂亮的输入元素,例如:
<input 
  type="text"
  name="email"
  id="email"
  placeholder="Your email"
  autocomplete="nope"
  tabindex="-1"
They wll be happy to enter some value such as
`dsaZusil@kddGDHsj.com`
  • 使用上述HTML之后,您还可以使用CSS不显示输入:
input[name=email]{ /* bait input */
  /* do not use display:none or visibility:hidden
     that will not fool the bot*/
  position:absolute;
  left:-2000px;
}
  • 现在,您的输入对于用户不可见,因此在PHP中期望您的输入为$_POST["email"] (无任何值)!否则,请不要提交表格。
  • 最后,所有你需要做的就是创建另一个输入<input name="sender" type="text" placeholder="Your email"> 后(!)“僵尸诱饵”输入实际的用户电子邮件地址。

致谢:

Developer.Mozilla-关闭表单自动填充
StackOverflow-忽略Tabindex


7
合法用户的浏览器是否有可能将诱饵输入字段视为电子邮件字段,并在用户选择自动填充表单的其余部分时自动将其自动填充?用户不会在屏幕上看到很远的字段被填满,他们仍然看起来像个机器人。
wilbbe01 2016年

我怀疑autocomplete=nope默认为on;-) MDN:input#attr-autocomplete
处理

@handle没关系,这是机器人诱饵的输入。您可以autocomplete="oh sunny day"为此写信。
Roko C. Buljan

19

我所做的是使用隐藏字段并将时间戳记放在其上,然后将其与使用PHP的服务器上的时间戳进行比较。

如果速度超过15秒(取决于您的表单的大小),则为机器人。

希望这个帮助


1
好主意,但是,我将限制设置为大约3到5秒,以允许快速/高级用户。我使用相同的方法,并将表单上的限制设置为3秒,从而过滤掉了99%的漫游器。
凯拉2014年

@adnhack您的意思是:1)使用php在页面加载中获取服务器时间并创建会话。2)用户或漫游器填写表格,单击“提交”,$.post并将所有内容发送到外部php文件。3)在外部PHP中再次获得服务器时间并与会话时间进行比较?
Andris

16

实际上消除垃圾邮件的一种非常有效的方法是在文本字段中添加文本,例如“删除此文本以提交表单!”。并且必须删除该文本才能提交表单。

表单验证后,如果文本字段包含原始文本或与此相关的任何随机文本,请不要提交表单。Bot可以读取表单名称并自动填写“名称”和“电子邮件”字段,但不知道它们是否必须从某个特定字段中删除文本才能提交。

我在公司网站上实施了此方法,它完全消除了我们每天收到的垃圾邮件。真的行!


有趣的是,您知道它是否比其他答案更有效...一个隐藏的文本框或跟踪填写表单所需的时间?
奥斯汀·亨利

4
这也将捕获那些可能无法遵循指示的用户。
wilbbe01 2016年

我喜欢这个!直到僵尸程序开始尝试使用空白字段和​​填充字段的不同组合为止……最好的测试方法是实施此方法并使用以下其中一项进行扫描:sectoolmarket.com/…–
nmit026

只要管理机器人的人没有发现并调整代码,此方法就有效。
塔拉·阿万

11

如何创建与背景颜色相同且必须保留为空白的文本字段输入框。这将解决机器人读取显示的问题:无


2
当您获得更多声誉而不是答案时,请将其添加为评论;)
Rob

3
这带来了可访问性问题。使用屏幕阅读器的用户不会隐藏honeypot索引。
Otterfan 2014年

5
我是一个盲人用户,我一次找到了这样的表单域,其上方的标签显示为:“如果可以看到,请将其留空。” 海事组织非常有效。
Parham Doustdar '16

8

http://recaptcha.net/

reCAPTCHA是一项免费的反机器人服务,可帮助将图书数字化

它已被Google收购(在2009年):

另见


5
作为用户,我发现Recaptcha通常很难弄清楚。有些单词很难读,以至于您不得不尝试3或4次。尽管这肯定会解决机器人问题。
布莱恩(Brian)2010年


我已经在此页面上找到了自己,因为CAPTCHA / reCAPTCHA当前并未停止提交机器人表格。这是5年后的事,它是一种比给出答案时的新技术
JohnnyFaldo

我很惊讶为什么这个答案没有更多的投票。无论用户是否喜欢,这都是一个很好的解决方案。特别是,如果仅用于注册表。
towi_parallelism

如今,recaptcha开始时只是一个简单的复选框,也许它不像以前那样痛苦?...
rogerdpack

6

这些垃圾邮件机器人中有许多只是在网络上徘徊的服务器端脚本。您可以通过使用一些JavaScript在发送表单请求之前对表单请求进行操作(例如,基于某些客户端变量设置其他字段)来与其中的许多人作斗争。这不是一个完整的解决方案,并且可能导致许多问题(例如,没有JavaScript的用户,在移动设备上的用户等),但它可能是您的攻击计划的一部分。

这是一个简单的例子...

<script>
function checkForm()
{
    // When a user submits the form, the secretField's value is changed
    $('input[name=secretField]').val('goodValueEqualsGoodClient');

    return true;
}
</script>

<form id="cheese" onsubmit="checkForm">
<input type="text" name="burger">

<!-- Check that this value isn't the default value in your php script -->
<input type="hidden" name="secretField" value="badValueEqualsBadClient">

<input type="submit">
</form>

在您的php脚本中的某处...

<?php

if ($_REQUEST['secretField'] != 'goodValueEqualsGoodClient')
{
    die('you are a bad client, go away pls.');
}

?>

此外,验证码也很棒,而且确实是抵御垃圾邮件的最佳方法。


谢谢,尽管可以在任何浏览器中轻松禁用javascript,从而消除了我的“反垃圾邮件机制”,所以我正在寻找更全球化的东西。
Gal

我可能是错的,但这不会告诉每个禁用JS的用户“您是一个糟糕的客户,请离开。”?
加尔

Gal是一个简单的示例,仅演示了如何针对客户端js设置的请求var进行验证。
John Himmelman 2010年

@John Himmelman Captchas可以解决,不一定是抵御垃圾邮件的最佳方法。像anti-captcha.com这样的付费服务可以以较低的费用解决表格验证码。

这种方法的问题在于,我已经看到很多使用PhantomJS的机器人。这将使他们通过。
Parham Doustdar '16

4

我很惊讶还没有人提到这种方法:

  • 在您的页面上,包括一个小的隐藏图像。
  • 投放此图片时放置一个cookie。
  • 处理表单提交时,请检查Cookie。


优点:

  • 方便用户和开发人员
  • 似乎是可靠的
  • 没有JavaScript

缺点:

  • 添加一个HTTP请求
  • 需要在客户端上启用Cookie


例如,WordPress插件Cookies可以使用此方法进行注释


使用PhantomJS之类的程序的机器人不会轻易解决这个问题吗?
Parham Doustdar '16

1
由于它是一个完整的浏览器引擎,因此可以加载资产等,应该可以。不过,我不确定它是否经常用于垃圾邮件机器人,因为它可能比cURL脚本慢得多。
Gras Double

有什么理由比CSRF令牌更好?
xenoterracide

1
CSRF令牌完全不会阻止机器人。第一个请求,获取包含令牌的表单。第二个请求,POST表单,包括令牌。
Gras Double

4

随着无头浏览器(例如phantomjs)的出现,它可以模拟任何东西,您不能认为:

  • 垃圾邮件漫游器不使用javascript,
  • 您可以跟踪鼠标事件以检测机器人,
  • 他们不会看到字段在视觉上是隐藏的,
  • 他们不会在给定时间之前提交。

如果曾经是真实的,那就不再是真实的了。

如果您不希望使用用户友好的解决方案,只需给他们一个漂亮的“我是垃圾邮件发送者”提交按钮

 <input type="submit" name="ignore" value="I am a spammer!" />
 <input type="image" name="accept" value="submit.png" alt="I am not a spammer" />

当然,您可以使用两个图像input[type=image]按钮,在每次加载后更改顺序,替代文本,图像的内容(及其大小)或name按钮的;这将需要一些服务器工作。

 <input type="image" name="random125454548" value="random125454548.png"
      alt="I perfectly understand that clicking on this link will send the
      e-mail to the expected person" />
 <input type="image" name="random125452548" value="random125452548.png"
      alt="I really want to cancel the submission of this form" />

出于可访问性的原因,您必须选择一种正确的文本替代方法,但是我认为对于屏幕阅读器用户来说,长句子要比被视为机器人更好。

附加说明:这些示例说明,对于垃圾邮件机器人来说,理解英语(或任何一种语言)并且必须做出简单的选择比:等待10秒,处理CSS或javascript,知道字段被隐藏,模拟鼠标移动或模拟键盘输入,...


在我看来,实际上您必须放置替代文本意味着您的两个图像解决方案与其他替代方案一样容易受到脚本编写的影响。对于“我不是垃圾邮件发送者”按钮:也不能编写脚本吗?
鹰眼

@Hawkeye 我的回答是,无头浏览器可以模拟任何东西:javascript,延迟,鼠标移动,隐藏字段,……在我的示例之前,术语“美丽”有点“讽刺”。但是这些例子说明,对于垃圾邮件机器人来说,理解英语并必须做出简单的选择比:等待10秒钟,处理CSS或javascript,知道字段被隐藏,模拟鼠标移动或模拟键盘键入,...更难。
亚当

我明白你的意思了。也许在您的答案中添加最后一个语句“但那些示例说明了……”等。因为那帮助我理解了你的意思。起初似乎是一个自相矛盾的论点,即“我们不能假定机器人不能……”,然后列出了我们仍然不能假定机器人不能做到的事情。但是,问题的症结在于您的示例(必须选择哪个“提交”按钮)更难-这是一个绝妙的答案。+1
鹰眼

3

一种非常简单的方法是提供一些字段,例如 <textarea style="display:none;" name="input"></textarea>并丢弃所有已填写的答复。

另一种方法是使用Javascript生成整个表单(或仅生成字段名称)。很少有机器人可以运行它。

无论如何,对于来自台湾或印度的实时“机器人”,您将不会做很多事情,因为每个链接的报酬为0.03美元,并以此为生。


2
我知道这个答案已有将近7年的历史,但我觉得值得一提。可以对许多漫游器进行编程,使其忽略样式为“ display:none”的字段,以避免这种类型的保护。
肯尼·约翰逊,

有数十种方法来遮盖输入,使用Javascript,在其顶部显示虚拟元素,将其移出可见区域,将其样式设置为与背景或布局装饰完美融合等。随机化(散列)输入名称(并保持映射(在会话服务器端为hashed => original)将有助于避免使用名称作为提示并手动映射哪些输入有效。无论如何,没有针对手动垃圾邮件的防御措施。
SF。

2

我有一种简单的制止垃圾邮件发送者的方法,至少在我的经验中,这种方法是100%有效的,并且避免使用reCAPTCHA和类似的方法。一旦实施了这种方法,在过去的5年中,我每天从网站的html表单上的近100个垃圾邮件变为零。

它可以利用大多数html表单处理脚本(我使用FormMail.pl)的电子邮件ALIAS功能以及图形提交“代码”(可以在最简单的图形程序中轻松创建)来发挥作用。这样的图形之一包括代码M19P17nH和提示“请在左侧输入代码”。

这个特定的示例使用字母和数字的随机序列,但是我倾向于使用访问者熟悉的非英语版本的单词(例如“ pnofrtay”)。请注意,表单字段的提示内置在图形中,而不是出现在表单上。因此,对于一个机器人来说,该形式领域并不代表其目的。

唯一真正的窍门是确保表单html将此代码分配给“收件人”变量。然后,在您的邮件程序中,确保将您使用的每个此类代码都设置为电子邮件别名,该别名指向您要使用的任何电子邮件地址。由于表单上没有任何类型的提示供机器人读取,也没有电子邮件地址,因此它不知道在空白表单字段中输入什么内容。如果未在表单字段中放置任何内容或接受代码以外的任何内容,则表单提交将失败,并显示“错误的收件人”错误。您可以在不同的表单上使用不同的图形,尽管根据我的经验并不是必须的。

当然,人类可以快速解决此问题,而无需解决与reCAPTCHA和类似的更优雅的方案相关的所有问题。如果垃圾邮件发送者确实响应了收件人的失败并将图像代码编程到机器人中,一旦您意识到机器人已经被硬编码以响应,就可以轻松地对其进行更改。在使用这种方法的五年中,我从未使用过任何形式的垃圾邮件,也从未收到任何形式的使用者的投诉。我敢肯定,在机器人中使用OCR功能可以击败它,但是我从未在使用html表单的任何网站上发生过这种情况。我还使用了“垃圾邮件陷阱”(指向我的反垃圾邮件策略的隐藏的“以后出现”的html代码)效果很好,但它们的有效率仅为90%。


1

我在这里想很多事情:

  1. 使用JS(尽管您不希望这样做)来跟踪鼠标的移动,按键,鼠标单击
  2. 获取引荐网址(在这种情况下,应该是来自同一域的一个)...普通用户必须先浏览网站,然后才能联系表格: PHP:如何获取引荐来源网址?
  3. 使用$ _SESSION变量获取IP并对照该IP列表检查表单提交
  4. 在一个文本字段中填充一些虚拟文本,您可以在服务器端检查是否被覆盖
  5. 检查浏览器版本:http : //chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ...很明显,机器人不会使用浏览器,而只会使用脚本。
  6. 使用AJAX一次发送字段并检查提交之间的时间差
  7. 在表单之前/之后使用伪造的页面,仅用于发送其他输入

您能详细说明一下valicu2000的某些步骤吗?它们在2020年仍然有效吗?谢谢。
迈克尔·莫里亚蒂

0

另一种选择是对可识别对象进行随机图片处理,而不是像许多网站那样对字母和数字进行随机处理。然后要求用户输入图片中的颜色是什么,或者对象本身是什么。

总而言之,每种解决方案都会有其优点和缺点。您将不得不在用户难以通过反垃圾邮件机制的难度与可以通过的垃圾邮件机器人数量之间找到一个令人满意的中位数。


好主意。不过,我不会使用颜色作为标准,因为这可能会排除色盲用户
Neil Aitken 2010年

是的,很好。实际上,图像的总体问题是无法访问图像,并且通过使用alt标签使其可以“访问”,机器人可以轻松地找出它们。
Brian

图片始终是一个坏主意...文字几乎无法阅读,我在其他网站上遇到过这个问题
valicu2000

这仅仅是验证码,其扭曲很小,使用户更难。也根本无法访问。
Mihai P. 2015年

0

机器人无法执行JavaScript,因此您可以执行一些操作,例如使用JavaScript向页面中注入某种隐藏元素,然后在提交表单之前检测其是否存在,但请注意,因为某些用户还将禁用JavaScript

否则,我认为您将被迫使用客户证明“人性化”的形式


4
智能机器人可以执行javascript。做一个JavaScript解决方案您阻止了99%,虽然机器人的
奔Scheirman

如果漫游器是浏览器插件,它将能够执行javascript并查看用户看到的内容(即使您正在执行Flash或
WebGL

如果您担心有人禁用JavaScript,只需使用CSS将文本字段放在页面上方。
Chewie The Chorkie 2015年

0

我发现最好的解决方案是在表单上使用一个非常琐碎的问题或字段,以免被僵尸程序发送垃圾邮件。

尝试添加如下所示的字段:

  • 将“ hello”复制到旁边的框中
  • 1 + 1 =?
  • 复制框中的网站名称

这些技巧要求用户低估必须在表单上输入的内容,从而使成为大型机器人表单填充的目标变得困难得多。

编辑

如您在问题中所述,此方法的背面是用户验证其形式的额外步骤。但是,在我看来,这比验证码要简单得多,填写表格时的开销不超过5秒,从用户的角度来看这是可以接受的。


作为用户,我讨厌那种胡扯。我知道垃圾邮件是一个问题,但是作为站点用户,这是我的问题吗?评论垃圾邮件是网站所有者面临的一个问题,因此,用户不应承担阻止它的负担。如果您走进一家商店并因为不想拖拖拉而被要求在鞋子上穿防护靴,那么您的想法是什么?只需要几秒钟,但这不是您的负担。
Mike

@Miki垃圾邮件使网站所有者浪费时间。时间就是金钱,我卖给您的东西会更贵。您的论点很容易被用来表达“我不在乎您要付租金,我要支付生产成本+1美元。您如何为我的问题付租金”。当你购买你支付托管,交通,时间等东西
米哈伊P.

@Mike-这是您的问题,因为您希望表单能够正常工作(显然,因为您正在使用它)。机器甚至可以找到最晦涩的站点,并且每天会发送成千上万的垃圾邮件,使这些表单无法使用。因此,下一次您使用小型企业的网站上的表单向小型企业提交问题时,您必须添加9 + 3……然后问自己:“为什么我必须这样做?” 您的答案可能是“因为我实际上想回答我的问题”。
Jimbo Jonny

@JimboJonny您完全错过了我的观点。垃圾邮件是一个问题(如我所述),但是有一些方法可以解决垃圾邮件问题,但不会影响用户体验。目前,我已经在数十个(甚至数百个)网站上部署了联系表单,而垃圾邮件则很少(每个表单每月一个垃圾邮件),因为我已经通过编程方式解决了垃圾邮件,而不是通过使用户跳过圈来解决。我的意思不是说垃圾邮件不是问题。这是一个问题。我的观点是,有多种解决方法,而不会影响用户的体验。
迈克

@JimboJonny Case就是这样,看看这个问题的最高排名(并被接受)答案。没有任何一种用户输入。这就是缓解垃圾邮件的方法。
迈克

0

有一个教程JQuery站点上有关于此。尽管它是JQuery,但其思想是与框架无关的。

如果JavaScript不可用,则您可能需要退回CAPTCHA类型方法。


0

我发现执行此操作的简单方法是在字段中添加一个值,并要求用户删除该字段中的文本。因为机器人只会填充它们。如果该字段不为空,则表示该用户不是人类,因此不会发布。它与验证码的目的相同。


0

这只是一个想法,ID在我的应用程序中使用了它并且效果很好

您可以使用javascript或jquery在鼠标移动时创建cookie,并在服务器端检查cookie是否存在,因为只有人类有鼠标,cookie只能由他们创建,cookie可以是时间戳或可以验证的令牌


有趣的主意!您是否在现实世界中使用过此功能?
skybondsor

它不会工作。如今,垃圾邮件发送者正在使用在浏览器中运行的软件。因此,他们可以模仿创建cookie的用户体验,然后使用该软件生成的不同内容运行x次。
诺伯特·诺伯森'16

如果用户未使用鼠标,则此操作将无效。如果您的表单设置正确,则用户应该可以使用键盘来填写整个表单。您可以跳至下一个字段,使用空格键选择单选按钮,然后在单击提交按钮时使用空格键(或输入)。
肯尼·约翰逊,

0

使用1)带有令牌的表单2)检查带有IP地址的表单延迟3)阻止IP(可选)


0

以我的经验,如果该表格只是“联系”表格,则不需要采取特殊措施。垃圾邮件受到Webmail服务的良好过滤(您可以通过服务器脚本跟踪Webform请求,以查看有效到达您电子邮件的内容,当然,我认为您拥有良好的Webmail服务:D)

顺便说一句,我正在尝试不依赖于会话(例如,计算一次单击按钮的次数以防止过载)。

我认为这样不好,确实,我想要实现的是接收来自执行某些特定操作的用户的电子邮件,因为这些用户是我感兴趣的用户(例如,查看“简历”页面并使用了适当联系人的用户)形成)。因此,如果用户做我想做的事情,我将开始跟踪其会话并设置一个cookie(我总是设置会话cookie,但是当我不启动会话时,它只是一个伪造的cookie,以使用户相信有会话)。如果用户做了不必要的事情,我不会为他保持会话状态,因此不会造成过载等。

同样对我来说,广告服务提供某种api(也许已经存在)以查看用户是否“看了广告”,看广告的用户很可能是真实用户,但如果他们不是真实用户,那将是一件好事。真的很好,至少您无论如何都会得到1个视图,因此不会有任何损失。(并且相信我,广告控件比您独自一人能做的要复杂得多)


0

实际上是带有显示的陷阱:没有哪个像魅力。它有助于将CSS声明移到包含任何全局样式表的文件中,这也将迫使垃圾邮件机器人也加载这些样式表(直接style =“ display:none;”声明可能由垃圾邮件机器人解释,因为文档本身内的本地样式声明)。

这与其他对策相结合,应该使任何垃圾邮件机器人都无法摆脱垃圾邮件(我有一本采用各种措施固定下来的留言簿,到目前为止,它们已经落入我的主要陷阱了;但是,如果任何机器人都绕过了这些陷阱,那里其他人准备触发)。

我正在使用的是假表单字段的组合(如果使用的浏览器无法处理一般的CSS或显示的 CSS,则它们也被描述为无效字段:无,尤其是),健全性检查(即输入格式)是否有效?),时间戳(提交太快和太慢),MySQL(用于基于电子邮件和IP地址以及泛洪过滤器实施黑名单),DNSBL(例如Spamhaus的SBL + XBL),文本分析(例如,强烈表明垃圾邮件的单词)和验证电子邮件(以确定所提供的电子邮件地址是否有效)。

关于验证邮件的注释:此步骤完全是可选步骤,但是当选择实施此步骤时,此过程必须尽可能易于使用(也就是说,应简化为单击电子邮件中包含的链接) ),并使该电子邮件地址在一段时间内列入白名单,以便在用户要发表其他帖子时避免后续验证。


0
  1. 我使用一种存在隐藏文本框的方法。由于漫游器会解析网站,因此他们可能会填充它。然后我检查它是否为空,如果不是网站则返回。

  2. 添加电子邮件验证。用户收到电子邮件,他需要单击链接。否则,请在一段时间后放弃该职位。


0

我已经在表单中添加了时间检查。如果填写时间少于3秒,则不会提交表单,这对我特别有用,特别是对于长表单。这是我在“提交”按钮上调用的表单检查功能

function formCheck(){
var timeStart; 
var timediff;

$("input").bind('click keyup', function () {
    timeStart = new Date().getTime();          
}); 
 timediff= Math.round((new Date().getTime() - timeStart)/1000);

  if(timediff < 3) { 
    //throw a warning or don't submit the form 
  } 
  else submit(); // some submit function

}

0

随着垃圾邮件机器人和自动浏览器等技术的日趋完善,确定垃圾邮件的来源将变得越来越困难。但是,无论垃圾邮件是由软件发布的,还是由人类发布的,还是由两者发布的,都是垃圾邮件,因为其内容如此。我认为最好的解决方案是通过Cleantalk或Akismet这样的反垃圾邮件API运行发布的内容。它相对便宜和有效,不会给用户带来麻烦。在访问API之前,您可以检查表单提交时间和其他传统检查方式,以检查不太复杂的机器人。


出于好奇,您对reCAPTCHA的感觉如何?您是第一个提到其他付费服务的人,但是与reCAPTCHA相比,又如何?和/或为什么您会推荐那些免费服务?
鹰眼

0

您可以通过在Javascript验证后添加正确的操作属性来尝试欺骗垃圾邮件机器人。如果机器人阻止了Javascript,他们将永远无法正确提交表单。

的HTML

<form id="form01" action="false-action.php">
    //your inputs
    <button>SUBMIT</button>
</form>

JAVASCRIPT

$('#form01 button').click(function(){

   //your Validations and if everything is ok: 

    $('#form01').attr('action', 'correct-action.php').on("load",function(){
        document.getElementById('form01').submit()
    });
})

然后,我在.attr()之后添加“回调”以防止错误。


-1

只值我的五分钱。如果这样做的目的是阻止听起来不错的99%的机器人,并且如果99%的机器人不能运行Java脚本,那么胜过一切的最佳解决方案就是不使用具有提交功能的表单帖子网址。

如果通过Java脚本控制表单,并且Java脚本收集表单数据,然后通过HTTP请求将其发送,则没有机器人可以提交表单。由于“提交”按钮将使用Java脚本来运行发送表单的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.