0

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

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

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

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

编辑:垃圾邮件发送者不断发布类似的内容:

Brianna 找工作 Lolita Pics 如果她在镜子前他妈的会更好!看到自己得到 f#@$ 更性感。只是想着就
欲罢不能

(剧透,轻微审查以避免在工作中引起人们的问题)

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

4

4 回答 4

1

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

绝大多数机器人只是阅读源代码,并将用垃圾填入他们可以找到的所有输入字段,发送请求,然后希望它有效。他们非常愚蠢,所以这样的事情可能会愚弄大多数机器人:

<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'];

换句话说,textarea在 HTML 中放置一个虚拟对象,使用 CSS 将其隐藏,然后等待机器人填充它。

于 2013-02-17T11:51:04.507 回答
1

有许多不同的方法可以摆脱垃圾邮件:

  1. Captcha - 例如ReCaptcha,但现在你可以以不到 3 美元的价格购买大约 1000 个重写的验证码。
  2. 用您的语言询问最知名的事实- 您可以向用户询问他们知道的一些事实,但垃圾邮件发送者不会。
  3. 反垃圾邮件过滤器- 例如Sblam!Akismet或其他反垃圾邮件服务。我认为它最适合你。
于 2013-02-17T11:19:09.653 回答
1

很多 Captcha 现在是 bot 可解决的,如果你想避免 Captcha,那么一个快速的建议是使用简单的文本陷阱。

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

“一周有多少天?”

然后再添加一个文本框,对比一下这个说;

7或7等

如果测试失败,则拒绝该条目...

随着时间的推移,您可能需要改变您的问题,甚至列出不同的问题,但这是一种简单易行的实施方法。

于 2013-02-17T11:20:09.533 回答
0

做你想做的最简单的方法是搜索字符串http://

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

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"])

通过此检查,您可以摆脱很多自动垃圾邮件(但仍然不是全部)

所以毕竟你最终得到了验证码

于 2013-02-17T11:20:33.203 回答