PHP注释表单验证以防止垃圾邮件


PHP Comment Form Validation to Protect Against Spam

我正在为一个网站构建一个评论表单。最终,它将是一个使用ajax的弹出jquery表单。我现在正试图把php整合在一起,并希望确保我覆盖了所有的基础,以防止垃圾邮件。

共有四个字段:电子邮件、姓名、网址和评论。到目前为止,这就是我为php所做的:

$email = $_POST['email'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
    print "E-mail is correct";
    $to      = 'asdfdsafasdfsda@gmail.com';
    $subject = 'the subject';
    $message = 'hello';
    $headers = 'From: webmaster@example.com';
    mail($to, $subject, $message, $headers);
} else {
    print "E-mail is not correct";
}

只是检查以确保用户使用的是正确的电子邮件地址。我没有使用数据库,所以不太担心SQL注入或其他与数据库相关的问题。我只是希望表单能够安全地抵御垃圾邮件机器人。

我应该在php中包含哪些其他元素来防止垃圾邮件?

您通常无法确定消息是垃圾邮件还是所需的文本,因此像您对电子邮件所做的语法检查是不起作用的。

另一方面,也有一些解决方案试图找到可以将消息标识为垃圾邮件的某些属性。例如,你可以调查http://wordpress.org/extend/plugins/akismet

一个常见的解决方案是使用captcha。这是一张包含一些只有人类才能阅读的模糊文本的图片。谷歌提供了一个简单的captcha系统,如果你想尝试:http://www.google.com/recaptcha

使用反垃圾邮件数据库。Botscout有一个非常好的,以及垃圾邮件。他们为所有主要的开源脚本提供了代码示例和插件。

至于你需要什么信息,一个重要的信息是用户的IP。

CSRF令牌是一个好主意,它有助于确保通信网络仅来自您的网站(因此不允许有人在您的网站外发布来自脚本的评论),但它对知道自己在做什么的垃圾邮件发送者并不是特别有效。

Captcha也是一个很好的解决方案(谷歌Recaptcha很容易包含在内),但它对最终用户来说可能很麻烦。

如果你唯一想要的功能是注释,那么你可能还想尝试一个已经建立的解决方案,比如Disqus

字幕广告
我没有用过,但读过它。概念很吸引人。它更容易为用户阅读,并且您在这个过程中可以赚钱。

附言:除了重述外,请务必发布您最终实现的内容。