如何减少通过简单的评论/评论系统发布的垃圾邮件


How can I reduce spam posted via a simple comment / review system?

我知道我要问的问题有数百个例子。但他们中没有一个像通缉犯一样为我工作。

所以,我有一个文本区,人们可以在其中添加评论/评论。但是评论框不断收到垃圾邮件。

我想正则表达式可能是阻止垃圾邮件发送者的最有效方法,但我讨厌Regex。

有没有其他方法可以阻止垃圾邮件?

编辑:垃圾邮件发送者不断发布这样的东西:

布丽安娜找工作Lolita Pics如果她在镜子前会更好!看到自己得到f#@$更性感。一想到它就变得饥渴
如果

(剧透,轻度审查以避免在工作中给人们带来问题)

所以我想阻止字符串中的每个超链接

有很多不同的方法可以消除垃圾邮件:

  1. Captcha-例如ReCaptcha,但现在你可以用不到3美元的价格买到大约1000个重写的Captcha
  2. 您的语言中关于最已知事实的问题-您可以向用户询问他们知道的一些事实,但垃圾邮件发送者不会
  3. 反垃圾邮件过滤器-例如Sblam!,Akismet或其他反垃圾邮件服务。我认为这对你最有效

Captcha的所有内容现在都是机器人可解的,如果你想避免使用Captcha,那么一个快速的建议是使用一个简单的文本陷阱。

在您的文本区域下,添加一个问题,例如;

"一周有几天?"

然后添加另一个文本框,并对此进行比较;

7或7等

如果测试失败,则拒绝输入。。。

随着时间的推移,你可能需要改变你的问题,甚至有一个不同问题的列表,但这是一个简单易行的方法。

这里的答案很好,但有时愚弄机器人是很好的第一步。

绝大多数机器人只读取源代码,然后用垃圾填充他们能找到的所有输入字段,发送请求,然后希望它能起作用。它们非常愚蠢,所以像这样的东西可能会愚弄大多数机器人:

<p style="display:none">Screen readers: Use the next textarea (the first is used to confuse spam bots).</p>
<textarea name="comment" style="display:none"></textarea>
<textarea name="real_comment"></textarea>

然后在你的脚本中:

if (isset($_POST['comment']) && strlen($_POST['comment']) > 0) {
    die('Bots begone!');
}
$comment = $_POST['real_comment'];

换句话说,在HTML中放入一个伪textarea,使用CSS隐藏它,然后等待机器人程序填充它执行所需操作的最简单方法是搜索字符串http://

以下if语句允许$text 中最多3个链接

if (substr_count($text,"http://") > 3)

但这并不是一个足够的检查,因为有很多垃圾邮件,根本不包含任何链接——只是垃圾。

所以你必须做的第二件事,是一个带有"脏话"的黑名单

    $lower = strtolower($text);
    foreach ($blockword as $word) {
            if (strpos($lower, strtolower($word))>0) {
                    //handle spam here..
            }
    }

毕竟,你必须维护一个不断增长的单词列表,并且仍然必须删除大量垃圾邮件。。

因此,您可以选择添加一个具有随机值的不可见字段,这些值存储在会话中,并检查该值是否正确提交

$_SESSION["random_secret"] = //create random string..

稍后检查

if ($_POST["secret"] == $_SESSION["random_secret"])

通过这种检查,你可以清除很多自动垃圾邮件(但仍然不是全部)

所以你最终得到了captchas