如何保护我的论坛免受垃圾邮件的侵扰?

6
我有一个论坛在我掌管的网站上,被大量的色情垃圾邮件骚扰。目前,我删除垃圾邮件并封锁IP地址,但这种方法并不十分有效。被封锁的IP地址列表正在迅速增长,但是论坛中的垃圾帖子数量也随之增加。
该论坛完全由我自己编写,使用PHP和MySQL构建。
有哪些具体的方法可以阻止垃圾邮件?
编辑: 我忘记提到的是,该论坛需要对未注册用户开放帖子发布。类似于博客评论。
14个回答

12

在我编写的留言板应用中,我实现了两个功能来防止大部分垃圾信息:

  • 不允许在会话中的第一次请求使用 POST 方法

  • 要求发布内容时有一个有效的 HTTP Refer(r)er


4
我喜欢“不允许在会话中的第一个请求发布帖子”这个功能;谢谢。 - Jacco
我更喜欢这些解决方案,而不是 CAPTCHA。CAPTCHA 会给所有合法用户带来不便,而上述解决方案则不会。 - Bill Karwin
在发布时需要一个有效的HTTP Refer(r)er。这很容易被伪造,因为它只是来自用户的标头。 - Powerlord
此外,HTTP引用者(Referer)并不是必须要有任何内容才能使调用有效。我猜可以将其关闭。但是,当表单加载时,您可以在会话中放置某些东西(并在X分钟后过期)。 - Salman Virk
我喜欢拒绝第一次POST请求的想法,但是对于网站上的POST ajax调用怎么办?如何允许直接的ajax POST请求,但禁止所有远程请求? - jan

5

我知道一种有效的方法是在提交表单之前使用JavaScript。例如,将方法从GET更改为POST。;) 垃圾邮件机器人无法执行JavaScript。当然,这也意味着不懂JavaScript的人将无法使用您的网站...如果您关心他们的话。;)(注意:我不关心)


2
我经常将表单操作留空,并在脚本中设置。 - Diodeus - James MacFarlane

5
根据我的经验,最好的简单防御措施就是采用“非标准”方法。如果您使您的网站非标准化,那么任何自动垃圾邮件都必须专门为您的网站编写代码,这(无意冒犯)可能不值得努力。请注意,如果垃圾邮件来自人类垃圾邮件发送者,则没有真正可以做到而不会停止合法发帖者的任何事情。因此,目标是找到一种解决方案,可以丢弃任何“标准”帖子-即,“填写整个表单并提交”。
以下是一些您可以尝试的示例:
- 使用一个隐藏的表单字段,并命名为听起来像垃圾邮件发送者想要填写的内容,例如“网站”或“主页”等。如果表单字段被填写,请将该消息丢弃而不发布,因为它是一个自动填写整个表单(包括不可见字段)的机器人。 - 您不必使用“真正的”验证码,但甚至可以使用一些简单的东西,例如“输入以下单词的反向拼写:<随机反向单词>”或“这个网站的域名是什么?”对于人类来说很容易做到,但需要相当复杂的机器人才能弄清楚该填写什么。

4

您可以使用验证码,有一些不错的脚本可供选择,例如PHPCaptcha,或使用垃圾邮件控制服务,例如Akismet,他们提供了PHP API


2

您可能想看一下这个问题,其中有几个答案描述了如何实现非侵入式验证码。

另一个需要考虑的事情是要求发帖之间有时间间隔以防止大规模垃圾邮件。


2

包含一个始终为“橙色”的验证码。


2
垃圾邮件可能由机器人或人类发送,但通常是机器人。
为了阻止机器人,可以添加一个由JavaScript填充的隐藏字段 - 标准、愚蠢的机器人(未经过您网站特殊定制的)有99.5%的机会不能正确填写这个字段。
如果它们无法正确填写该字段,请给它们一个需要JavaScript的消息,然后让它们用其他方式发布(例如使用验证码或注册)。这样,匿名用户(不是垃圾邮件机器人)就可以(大多数情况下)毫无问题地发布,而大多数垃圾邮件机器人(没有针对您特定网站的)则不能。
不要费力气去黑名单IP地址或使用第三方黑名单,这只会产生错误的结果。几乎所有的机器人都使用与(某些)合法用户相同的IP地址。
另一个技巧是在输入框中添加一个听起来合理的名称,并用CSS设置为难以看到 - 填写任何内容的人都被认为是机器人。

2

高级解决方案:

你可以尝试使用非标准表单:

  • 用CSS隐藏必须保持空白的字段
  • 使用具有误导性名称的字段,例如<input name=email> 用于表示 不是 邮箱地址。

对我而言,验证码就像向垃圾邮件发送者投降,并让他们无论如何都能破坏您的论坛一样——除了遭受垃圾邮件破坏之外,还会遭受可用性和可访问性的损害。


2

我发现一种非常有效的方法:禁止包含太多URL(比如超过5个)的评论。自从这样做以来,我再也没有遭受到垃圾评论。

编辑:在写上述内容后,我不断收到只有一个链接的垃圾评论。现在我添加了一些诱饵字段,几个月来没有出现任何垃圾评论。


0

在用户回复其注册邮箱收到的电子邮件之前,不要让任何人发布内容。你会看到很多论坛和邮件列表会生成一个唯一的电子邮件地址或网址,发送给新用户的注册邮箱,他们必须回复电子邮件或点击链接来完成注册。


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