35

我想在我的网站上添加一个简单的联系表格,以便客户可以轻松地与我联系。

<form>
    NAME
    <input type='text' name='name' />
    EMAIL
    <input type='text' name='email' />
    MESSAGE
    <textarea name='message' />
    <input type='submit' />
</form>

此表格将简单地通过电子邮件向我发送客户消息。

但是,我也想减少(不是,我不是说消除而是至少减少)垃圾邮件。

我已经研究过使用验证码,但最终,我不想妨碍客户填写额外的信息。

我可以在我的联系表中使用任何关于防止/减少垃圾邮件的简单方法的想法。

4

15 回答 15

67

我一直在使用的一个非常简单的技巧,成功率惊人地好:提供一个对人类用户隐藏的文本字段style="display: none",但名称很诱人,例如email. 大多数机器人会在这个领域填写一些东西,但人类看不到它,所以他们不会。在服务器上,只需确保该字段为空,否则将提交视为垃圾邮件。

于 2010-02-09T16:12:39.403 回答
7

如果您想做一个完全前端的解决方案,我最近通过将表单操作属性留空并通过 $(document).ready 函数填充它取得了成功。大多数垃圾邮件机器人使用禁用了 javascript 的浏览器,或者正在寻找隐藏字段以避免检测。

例子:

您的 html 将是:

<form method="POST" action="" id="contact-form">

在该页面的任何地方,您都可以使用它来填充它。

<script>
        $(document).ready(function(){
                 $("#contact-form").attr("action", "/yourMailScript.cgi");
        });
</script>

没有 javascript 的机器人浏览器不会收到表单操作,并且在提交时会收到 404。任何使用普通浏览器的人(除非他们出于偏执的原因禁用了 JS)都会得到正常的行为。

于 2014-07-31T20:50:49.550 回答
6

除了 CAPTCHA 类型的用户确认之外,唯一的(客户端)方法是动态编写整个内容。许多(但不是全部)机器人可能会忽略动态内容。例如

document.write("<"+"form>"
  +" NAME "
  +" <"+"input type='text' name='name' /> "
  +"EMAIL "
  +"<"+"input type='text' name='email' /> "
  +"MESSAGE "
  +"<"+"textarea name='message' /> "
  +"<"+"input type='submit' /> "
+"<\/form> ");
于 2010-02-09T16:11:44.630 回答
5

使用 Google 或 Yahoo 邮件帐户。他们有很好的反垃圾邮件过滤器。

于 2010-02-09T16:10:03.980 回答
2

隐藏字段、愚蠢的问题(什么是 3+4?)等,在阻止表单上的垃圾邮件方面不是很有效,恕我直言。

几年前我对此进行了研究,并提出了一个我称之为“FormSpammerTrap”的解决方案。它使用 JavaScript 代码来“监视”必填字段的焦点/单击。自动化流程,除非针对特定站点高度定制(这需要比垃圾邮件所有者想要的时间更多的时间),否则无法“聚焦/单击”必填字段。(还有一些我使用的其他技术。)

我的www.FormSpammerTrap.com网站上有一个免费的解决方案。那里有一个表格,垃圾邮件机器人可以尝试发送垃圾邮件......而且他们没有,超过 3 年。欢迎您试用...它都是开源的,因此您可以看到它是如何工作的。(而且,如果您使用表格,我不会收集您的电子邮件。我回复一次,然后删除您的电子邮件。)

恕我直言,我的技术在阻止垃圾邮件机器人方面要有效得多。他们无法在该网站上对联系表进行垃圾邮件攻击。

** 2018 年 7 月 12 日添加 ** 诀窍是添加一个点击/聚焦事件,将操作参数更改为实际处理页面。否则,我使用的默认值是 Honeytrap 类型的站点。我认为垃圾邮件发送者很难模拟这些事件,尽管可能。该技术阻止了许多机器人垃圾邮件发送者。

尽管如此,在该网站上使用该技术几年后,该表单还没有被机器人发送垃圾邮件。(我定义了一个机器人垃圾邮件发送者,它通过攻击发送多个提交,而不仅仅是一个提交。)

为我工作。

于 2018-04-25T02:32:38.937 回答
1

#sec {
  visibility: hidden;
  padding: 0;
  margin: 0;
  height: 1;
}
<form method="POST" action="www.google.com">
  NAME
  <input type='text' name='name' />
  <br /> EMAIL
  <input type='text' name='email' />
  <br /> MESSAGE
  <textarea name='message' /></textarea>
  <br />
  <input type='text' name='security' id='sec' placeholder="Do not enter anything here" />
  <input type='submit' formaction="" />
</form>

**这里,只有点击提交按钮的用户才能真正提交表单。使用自动提交只是将机器人重定向到 google.com。**

*此外,输入“安全”是一个对用户隐藏的输入字段,但对某些机器人可见,通常称为 HoneyPot Captcha。在服务器端,您可以简单地跳过所有填充了“安全”字段的请求。并非每个机器人都可以通过这种方式被欺骗,这就是该属性formaction发挥作用的地方*

于 2018-07-16T09:57:15.890 回答
1

您可以添加简单的问题,每个想联系您的认真的人都可以轻松回答。例如他应该输入域的第一个字母的字段。大多数机器人不理解这个问题,并且不会输入任何内容或随机输入。

您还可以尝试跟踪用户需要输入数据的时间。如果他尝试在输入第一个单词前 5 秒之前发送表单,则不允许发送。机器人通常只是解析网站,填写所有内容,然后发布并转到下一个网站。

于 2017-10-10T08:44:01.603 回答
0

用于 URI 方法、urlencoded 字符或两个 HTML 标记字符的 grep 似乎有效。

于 2014-06-09T21:48:49.550 回答
0

使用JS技术。就像如果用户出现在您的联系页面上,那么 javascript 将生成一个字符串或您喜欢的任何类似内容,并将信息放在隐藏的文本字段中。但这不是实际的解决方案,智能机器人可以轻松破解它。

另一种方法是,您也可以在联系表单提交后使用电子邮件验证。并将数据存储在您的数据库中。如果客户通过电子邮件验证 url,那么联系信息将从数据库中邮寄给您。

并且还使用延迟来防止连续的机器人攻击。就像sleep()在 PHP 代码中一样。这将在您的代码中增加一些延迟。通过这种方式,您可以减少随机攻击,但这不是预防方法。

于 2014-06-17T07:05:04.753 回答
0

我在这个页面上发现了一个好主意:

http://www.evengrounds.com/developers/alternatives-to-captcha

您可以让您的 SUBMIT 按钮显示一个确认页面,在该页面上向用户解释他必须点击 CONFIRM 按钮才能真正发送消息。垃圾邮件机器人通常只会提交第一个表单并跳过第二步。

于 2015-06-09T15:50:49.000 回答
0

我认为如今,发布的大多数解决方案要么效率低下,要么已经过时。

  1. reCAPTCHA 不再是用户的麻烦

谷歌文档

reCAPTCHA v3 为每个请求返回一个分数,没有用户摩擦。该分数基于与您的站点的交互,使您能够为您的站点采取适当的操作。

OP 声明他需要 CAPTCHA 的替代品,以避免给他的用户带来麻烦(直到 v.2,reCAPTCHA 需要用户交互)。但是,从 v.3 开始,reCAPTCHA 可以“静默”地检测机器人,而无需用户交互。

  1. 仅前端解决方案效率低下

蜜罐(只有机器人可以填写的隐藏输入)和简单的问题方法以及其他前端实现仍然容易受到垃圾邮件攻击。首先,垃圾邮件发送者可以绕过所有前端并直接发送到服务器。因此,需要进行服务器端检查。

此外,如果有人想向您的网站发送垃圾邮件,特别是,他可以轻松阅读您的源代码并构建一个“聪明”到不会被前端保护捕获的脚本。

另一方面,reCAPTCHA v.3 跟踪数据并在 Google 的后端在幕后工作,以确定用户是否真的是人类。它的逻辑是隐藏的,因此,攻击者无法轻易开发出“更聪明”的机器人。此外,攻击者不能只是绕过前端;创建一个令牌,在服务器端传递,然后到 Google 的后端进行验证。

TL;博士

如今,reCAPTCHA 似乎是各方面的最佳解决方案。没有用户摩擦,最安全。

于 2021-01-19T00:09:28.183 回答
0

使用 Akismet 或 Cleantalk 等反垃圾邮件 API。您可以在访问 API 之前对不太复杂的机器人使用传统检查。反垃圾邮件 API 是捕获人类提交的垃圾邮件的唯一方法。

于 2017-12-12T02:39:54.180 回答
0

如果您不想使用recaptcha,那么您可以使用Real Email之类的服务并在处理之前验证电子邮件服务器端。请记住,如果输入有问题,您可能想要一种向用户报告的方法。

于 2021-09-14T11:23:06.773 回答
-2

您可以只记录 IP ($_SERVER['REMOTE_ADDR']) 并在 1 分钟内禁止使用此 IP 进行重新验证,或者更准确地说,启动会话,不给访客提供 ID 并禁止在 1 分钟内重新验证(或更多但机器人不喜欢等待)。

于 2010-02-09T16:09:28.800 回答
-4

您无需减少垃圾邮件,因为邮件未在网站上发布。大量垃圾邮件发布在论坛和博客上,因为这将吸引大量观众和机器人。

对于私人联系表格,垃圾邮件是无效的,因此您不必担心大量。可以使用收件箱中的垃圾邮件过滤器(例如使用 gmail 或 yahoo)有效地过滤您将收到的少数垃圾邮件,特别是因为传入的邮件是没有图像的纯文本。

于 2010-02-09T16:18:17.657 回答