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

时间:2013-09-21 22:38:05

标签: javascript php jquery forms spam-prevention

我有一个简单的表单,用户可以使用该表单注册他们的电子邮件地址以获取简报。

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

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

有什么想法吗?

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

6 个答案:

答案 0 :(得分:1)

您可以使用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

答案 1 :(得分:1)

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

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

没有验证码,隐藏字段等;那些可能暂时起作用,但通常不会长期发挥作用。

它是免费的,它在我穿上的任何网站上都很棒。基于PHP,但也适用于WordPress(不是插件)。

答案 2 :(得分:0)

你可以这样做,

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

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

编辑:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你可以使用capthcha - 这对用户来说是破坏和烦恼的。

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

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

答案 5 :(得分:0)

一种常见的方法是将另一个文本字段添加到form - 部分。在样式表(不是样式标记!)中,将其css-property设置为display:none,因为大多数spambots会填充每个可用的input - 元素,但不会加载外部.css文件。 当你的脚本收到请求时,你检查这个隐藏的文本字段 - 如果它是空白的,你很可能不是垃圾邮件。