如何防止表单上的垃圾邮件

How to prevent spam on a form

本文关键字:何防止 表单      更新时间:2023-09-26

我有一个简单的表格,用户用它来注册他们的电子邮件地址以获得时事通讯。

我想防止垃圾邮件发送者提交 000 多封虚假电子邮件。最好的方法是什么?

我想过将每个IP地址的输入数量限制为每小时60个,但后来认为任何确定的人都会简单地欺骗他们的IP,作为攻击的一部分。

有什么想法吗?

*编辑:我正在寻找服务器端解决方案。在这种情况下,UX 很重要,所以我不想使用验证码,也不想要求用户使用令牌进行验证

您可以使用

negative captcha .想法是有一个人类不可见的字段,但机器人会在其中输入值。在服务器端,您可以忽略在负验证码字段中具有值的请求。

Adavatage是普通用户看不到任何额外的步骤,例如输入验证码单词或验证电子邮件。缺点是,只要人们不专门为您的网站自定义机器人,该方法就有效。

否定验证码的示例。将其包含在表单中。

<div style="position: absolute; left:-2000px;"><input type="text" name="email_name" value="" /></div>

在服务器端做一些类似的事情

if (params[:email_name] != "") //bot
else //not a bot

我在互联网的某个地方发现了一个很棒的技术。我增强了它,它现在可以在 www.formspammertrap.com 上获得(开源)。

它使用一些javascript来替换表单操作,并且需要实时用户的实际"点击"。

没有验证码、隐藏字段等;这些可能暂时有效,但通常不会长期有效。

它是免费的,在我放置它的任何网站上都很好用。基于PHP,但也可以在WordPress中工作(不是插件)。

你可以做这样的事情,

function validEmail($email){
    if (filter_var($email, FILTER_VALIDATE_EMAIL)){
        list($user,$domain) = explode('@',$email);
        return checkdnsrr($domain, 'MX');
    } 
    return false;
}

它可能不会接收每封假电子邮件,但我总是通过向他们发送带有链接的验证电子邮件来验证他们的电子邮件。

编辑:

至于使用CSRF的表单上的垃圾邮件,这应该可以防止大多数垃圾邮件(至少根据我的经验)

当用户在栏中键入其电子邮件地址时,运行一个脚本,该脚本将向他们发送一封电子邮件到指定的包含链接的地址,当他们单击该链接时,它将激活该电子邮件地址以获取新闻稿。

您可以使用验证码 - 它对用户来说很烦人。

我使用的是一个简单的问题(一只狗有多少日志),然后使用 <input type='text' name='email2' value=''> 的输入。然后,我对服务器端进行必要的检查。但我不做的一件事是通知该人出了问题,即在电子邮件2文本框中输入了无效的数字。

无论如何,只是一个想法。

一种常见的方法是,将另一个文本字段添加到form -部分。在您的样式表(不是样式标签!)中,您将它的css属性设置为display:none,因为大多数反垃圾邮件插件会填写所有可用的input-element,但不加载外部.css文件。当您的脚本收到请求时,您检查此隐藏的文本字段 - 如果它是空白的,您很有可能这不是垃圾邮件。