如何过滤评论垃圾邮件?PHP

7
我正在寻找关于过滤垃圾邮件的文章。当我搜索时,我一直找到的都是有关WordPress、过滤脏话等内容,这不是我要找的。我正在寻找编写自己的过滤系统和最佳实践的方法。
任何已经完成此操作的人提供的教程链接,将不胜感激。
到目前为止,唯一好的文章是http://snook.ca/archives/other/effective_blog_comment_spam_blocker
8个回答

12

当编写自己的方法时,您将需要运用一些启发式方法。

例如,垃圾评论通常会有2个或更多的URL链接。

我会这样开始编写您的过滤器,使用触发词典,并通过循环使用它们来确定概率:

function spamProbability($text){
    $probability = 0;  
    $text = strtolower($text); // lowercase it to speed up the loop
    $myDict = array("http","penis","pills","sale","cheapest"); 
    foreach($myDict as $word){
        $count = substr_count($text, $word);
        $probability += .2 * $count;
    }
    return $probability;
}

请注意,此方法会导致许多误报,具体取决于您的单词集。您可以让您的网站“标记”概率> .3且<.6的内容进行审核(但会立即上线),要求那些>.6且<.9的内容进入审核队列(直到获得批准之前不会出现),那么任何概率超过1的内容都将被拒绝。

显然,这些都是您需要调整的阈值,但这应该为您提供了一个相当基本的系统。您可以添加其他限制条件以增加/降低垃圾邮件的概率,例如检查坏单词与总单词比例,更改单词权重等。


1
稍等一下...你不能为每个单词都执行strtolower($text)。 - dynamic
1
为什么不呢?这样可以捕捉大小写的变化。我们并没有输出新的小写字符串,只是在比较中将其丢弃了。 - Tim
除非你指的是效率不好,是的,它确实不好,但这只是一个概念示例。 - Tim
更新为仅运行一个小写字母。 - Tim
我猜他的网站流量可能很低,评论也不超过几百个字符,所以一旦他学会了这些概念,就可以着手创建更快的方法。回答这个问题并向OP呈现一个400个字符长的正则表达式是没有意义的,对吧?;-) - Tim
感谢大家的回复,非常感激。 - Sean H Jenkins

2

我很惊讶没有人提到Akismet。我从来没有收到过被标记为垃圾邮件或合法邮件的错误信息。我的WordPress安装程序已经预装了它。我只需要启用即可。


1

1

1
你是否正在寻找一种阻止垃圾邮件和机器人的方法?如果是,你可以添加一个验证码:http://en.wikipedia.org/wiki/CAPTCHA 如果这是你想要做的,那么在任何项目上添加它都应该很容易。否则,我不确定你在过滤垃圾邮件方面的意思是什么。

好的,验证码是一种方式,但它无法阻止手动编写垃圾评论的人。实际上,我正在寻找一个或多个函数,可以对评论进行处理并输出垃圾评论的概率。 - Sean H Jenkins
似乎不是一件容易的事情。预测人类创建的垃圾邮件就像随便发布评论一样。如果他们花时间手动垃圾邮件轰炸你,那么他们无论如何都会找到方法来轰炸你。唯一可能阻止这种情况的是一些IP封锁,如果你注意到垃圾邮件来自某些IP地址。 - Hudspeth
在我的问题中,我发布了一种可以实现这一点的方法,但我正在寻找不同的系统/方法。IP阻止并不有效,因为所谓的“顽固”的评论垃圾邮件发送者将使用代理来反弹请求,因此阻止IP地址从长远来看会失去您的访问者。 - Sean H Jenkins

1

0

我猜这篇文章与垃圾评论的战争可以给你一些提示。当然,现在有些机器人已经足够聪明了,所以你可能还需要添加CAPTCHA。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接