我想在我的网站上添加一个简单的联系表单,以便客户可以轻松与我联系。
<form>
NAME
<input type='text' name='name' />
EMAIL
<input type='text' name='email' />
MESSAGE
<textarea name='message' />
<input type='submit' />
</form>
此表单只会通过电子邮件向我发送客户留言。
但是,我也希望减少(不是,我不是说消除但至少减少),垃圾邮件。
我研究过使用CAPTCHA,但最终,我不想阻止客户填写额外信息。
我可以在联系表单中使用一个简单的垃圾邮件预防/减少方法。
答案 0 :(得分:57)
我一直使用的一个非常简单的技巧,其成功率非常高:提供一个文本字段,该文字字段对style="display: none"
的人类用户隐藏,但具有诱人的名称,如email
。大多数机器人会在这个领域填写一些东西,但人类看不到它,所以他们不会。在服务器上,只需确保该字段为空,否则将提交视为垃圾邮件。
答案 1 :(得分: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> ");
答案 2 :(得分:4)
使用Google或Yahoo邮箱帐户。他们有很好的反垃圾邮件过滤器。
答案 3 :(得分:4)
如果你想做一个完全的前端解决方案,我最近取得了成功,将表单操作属性留空,并通过$(document).ready函数填充它。大多数垃圾邮件程序使用禁用了javascript的浏览器,或者正在查找隐藏字段以避免被检测到。
示例:
你的HTML会是:
<form method="POST" action="" id="contact-form">
在该页面的任何位置,您都可以使用它来填充它。
<script>
$(document).ready(function(){
$("#contact-form").attr("action", "/yourMailScript.cgi");
});
</script>
没有javascript的bot浏览器将无法获得表单操作,并且在提交时将获得404。任何拥有正常浏览器的人(除非因偏执原因而禁用JS)将获得正常行为。
答案 4 :(得分:0)
对于URI方法,urlencoded字符或两个HTML标记字符的grep似乎有效。
答案 5 :(得分:0)
使用JS技术。就像用户进入您的联系页面一样,javascript将生成一个字符串或您喜欢的任何内容,并将信息放在隐藏的文本字段中。但它不是实际的解决方案,智能机器人可以轻松破解它。
另一种方法是,您也可以在提交联系表格后使用电子邮件验证。并将数据存储在您的数据库中。如果客户通过电子邮件验证网址,则联系信息将通过数据库邮寄给您。
并且还使用延迟来防止连续的机器人攻击。与PHP代码中的sleep()
类似。这将在您的代码中添加一些延迟。通过这种方式,您可以减少随机攻击,但这不是预防方法。
答案 6 :(得分:0)
我在这个页面上找到了一个好主意:
http://www.evengrounds.com/developers/alternatives-to-captcha
您可以让您的SUBMIT按钮显示确认页面,在其上向用户解释他必须点击确认按钮才能实际发送消息。 Spambots通常只提交第一个表格并跳过第二步。
答案 7 :(得分:0)
您可以添加简单的问题,每个想与您联系的认真的人都可以轻松回答。例如,他应该输入域的第一个字母的字段。大多数机器人不理解这个问题,并且不会输入任何东西或随意的东西。
您还可以尝试跟踪用户输入数据所需的时间。如果他在键入第一个单词之前尝试发送表单的时间超过5秒,则不要发送它。机器人通常只是解析网站,填写所有内容,然后发布并转到下一个网站。
答案 8 :(得分:0)
使用像Akismet或Cleantalk这样的反垃圾邮件API。在使用API之前,您可以使用传统的检查来处理不太复杂的机器人。反垃圾邮件API是捕获人类提交的垃圾邮件的唯一方法。
答案 9 :(得分:0)
隐藏的字段,愚蠢的问题(3 + 4是什么?)等,在阻止表单上的垃圾邮件方面不是很有效,恕我直言。
几年前我研究了这个问题,并提出了一个我称之为#Sp; FormSpammerTrap&#34;的解决方案。它使用JavaScript代码来观看&#39;焦点/ onclick必填字段。自动化流程,除非针对特定网站进行高度自定义(花费的时间比spambot所有者想要的时间长),否则无法集中注意力于点击&#39;必填字段。 (还有一些我使用的其他技术。)
我的www.FormSpammerTrap.com网站上有免费解决方案。那里有一个表单,垃圾邮件可以尝试垃圾邮件...而且它们已经超过3年了。欢迎您试用它...它是所有开源的,所以你可以看到它是如何工作的。 (并且,如果您使用该表单,我不会收到您的电子邮件。我回复一次,然后删除您的电子邮件。)
我的技术在阻止垃圾邮件时更有效,恕我直言。他们还没有能够在该网站上建立联系表格。
**已于2018年7月12日添加** 诀窍是添加一个on-click / on-focus事件,将action参数更改为实际的处理页面。否则,我使用的默认值是一个honeytrap类型的站点。我认为垃圾邮件发送者很难模拟这些事件,尽管可能也是如此。该技术阻止了许多僵尸垃圾邮件发送者。
然而,在该网站上使用该技术几年后,该表格还没有被机器人发送垃圾邮件。 (我定义了一个机器人垃圾邮件发送者,通过攻击发送多个提交,而不仅仅是一次提交。)
适合我。
答案 10 :(得分:0)
#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
发挥作用的地方*
答案 11 :(得分:0)
我认为现在发布的大多数解决方案要么效率低下,要么已经过时。
reCAPTCHA v3 在没有用户摩擦的情况下为每个请求返回一个分数。 该分数基于与您网站的互动,使您能够 为您的网站采取适当的措施。
OP 表示他需要 CAPTCHA 的替代方案,以避免给他的用户带来麻烦(直到 v.2,reCAPTCHA 需要用户交互)。但是,从 v.3 开始,reCAPTCHA 可以“静默”检测机器人,而无需用户交互。
蜜罐(只有机器人才能填写的隐藏输入)和简单问题方法,以及其他前端实现,仍然容易受到垃圾邮件攻击。首先,垃圾邮件发送者可以绕过所有前端,直接向服务器发帖。因此,需要进行服务器端检查。
此外,如果有人想向您的站点发送垃圾邮件,特别是,他可以轻松阅读您的源代码并构建一个足够“聪明”的脚本被前端保护捕获。
另一方面,reCAPTCHA v.3 会在 Google 的后端跟踪数据并在幕后工作,以确定用户是否真的是人类。它的逻辑是隐藏的,因此,攻击者无法轻易开发出“更智能”的机器人。此外,攻击者不能仅仅绕过前端;令牌被创建,被传递到服务器端,然后到谷歌的后端进行验证。
TL;DR
如今,reCAPTCHA 似乎是各方面的最佳解决方案。没有用户摩擦,最安全。
答案 12 :(得分:-2)
您只需记录IP($ _SERVER ['REMOTE_ADDR'])并禁止在1分钟内使用此IP重新验证,或者更准确地说,启动会话,为访问者提供ID并禁止重新验证1分钟(或更多,但机器人不喜欢等待)。
答案 13 :(得分:-3)
您不需要减少垃圾邮件,因为邮件不会在网站上发布。在论坛和博客上发布了大量垃圾邮件,因为这会吸引大量观众和机器人。
对于私人联系表单,垃圾邮件无效,因此您不必担心大量邮件。您收到的少量垃圾邮件可以通过收件箱中的垃圾邮件过滤器进行有效过滤(例如使用gmail或yahoo),特别是因为收到的邮件是没有图像的纯文本。