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

时间:2009-01-27 20:34:19

标签: php mysql forum spam-prevention

我在我掌握的网站上有一个论坛,每天都会收到垃圾邮件。目前我删除垃圾邮件并阻止IP。但这并不是很好。被阻止的IP列表正在快速增长,但论坛中的垃圾邮件数量也在增长。

论坛完全是我自己的代码。它是用PHP和MySQL构建的。

阻止垃圾邮件有哪些具体方法?

修改 我忘记提到的事情是论坛需要对未注册用户开放发布。有点像博客评论。

14 个答案:

答案 0 :(得分:12)

在我写的留言簿应用程序中,我实现了两个可以防止大部分垃圾邮件的功能:

  • 不允许POST作为会话中的第一个请求

  • 发布时需要有效的HTTP Refer(r)

答案 1 :(得分:6)

我所知道的一种方法是在提交表单之前使用JavaScript。例如,要将方法从GET更改为POST。 ;)Spambots在执行JavaScript时很糟糕。当然,这也意味着非Javascript用户将无法使用您的网站......如果您关心他们的话。 ;)(注意:我没有)

答案 2 :(得分:5)

根据我的经验,最好的轻松防御来自于做“非标准”的事情。如果您使您的网站不标准,这使得任何自动垃圾邮件都必须专门为您的网站编码,这可能是不值得的。请注意,如果垃圾邮件来自人类垃圾邮件发送者,那么您无法做任何事情也不会阻止合法海报。因此,我们的目标是找到一个可以丢弃任何“标准”帖子的解决方案 - 即“填写整个表单并推送提交”。

您可以尝试的几个例子:

  • 有一个隐藏的表单字段,其名称听起来像垃圾邮件发送者想要填写的内容,如“网站”或“主页”或类似内容。如果填写表单字段,则丢弃该消息而不是发布它,因为它是一个机器人自动填写整个表单,甚至是不可见的字段。
  • 您不必使用“真实”验证码,但即使是“向后输入以下单词:<随机向后单词>”之类的简单内容或“这个网站的域名是什么?”。人类容易做,但需要一个相当复杂的机器人才能找出要填写的内容。

答案 3 :(得分:4)

您可以使用验证码,有一些好的脚本,如PHPCaptcha或使用垃圾邮件控制服务,如Akismet,它们有PHP API

答案 4 :(得分:2)

您可能需要查看this question,其中有几个答案描述了如何实现非侵入式验证码。

要考虑的另一件事是在帖子之间需要时间以防止大量垃圾邮件。

答案 5 :(得分:2)

包含始终为“橙色”的CAPTCHA。

答案 6 :(得分:2)

垃圾邮件可能是机器人或人类 - 机器人更有可能。

要停止机器人,请输入一个由Javascript填充的隐藏字段 - 有99.5%的可能性,未经您自定义的标准愚蠢机器人无法填充该内容。

如果他们未能正确填写,请向他们提供Javascript是必需的信息,并给他们一些机会以其他方式发布(例如使用验证码或注册)。这样,不是垃圾邮件程序的匿名用户可以(大部分)仍然没有问题发布,并且大多数垃圾邮件程序(没有为您的特定站点量身定制)不会。

不要打扰列入黑名单的IP地址或使用第三方黑名单,这只会产生误报。几乎所有机器人都使用与(某些)合法用户相同的IP地址。


另一个技巧是放入一个带有合理的声音名称的文本字段,这很难用CSS看到 - 任何填充此字段的人都被视为机器人。

答案 7 :(得分:2)

高级解决方案:

你可以用非标准形式试试运气:

  • 必须保持为空的字段,用CSS隐藏
  • 具有误导性名称的字段,例如对于电子邮件的内容,<input name=email>

对我来说,CAPTCHA就像放弃垃圾邮件发送者并让他们损坏你的论坛 - 除了垃圾邮件损坏,你获得可用性和可访问性损害。

答案 8 :(得分:2)

我发现有些令人惊讶的效果:禁止包含太多网址的评论(例如,超过5条)。由于这样做,我没有评论垃圾邮件。

编辑:自从编写上述文章以来,我只有一个链接,我就会反复发表评论垃圾邮件。我现在已经添加了一些honeypot fields,并且几个月来一直没有推荐垃圾邮件。

答案 9 :(得分:0)

在回复发送到其注册电子邮件地址的电子邮件之前,不要让任何人发帖。您会看到许多论坛和邮件列表会生成一个唯一的电子邮件地址或网址,该网址会发送到新用户的指定电子邮件地址,他们必须回复该电子邮件或点击该链接以完成注册。

答案 10 :(得分:0)

Captcha绝对是最简单的方法 - 尝试KittenAuth,如果你想要一些防止僵尸的东西(虽然我这次有大熊猫)

答案 11 :(得分:0)

没有一个答案,因为垃圾邮件真的是经济问题:有人把他们的东西放到网上是多少钱。然而,有些解决方案似乎相当不错

答案 12 :(得分:0)

我想说,在大多数情况下,CAPTCHA足以阻止垃圾邮件。 但要使用强大的,例如http://www.captcha.net/

请记住,垃圾邮件发送者不想花太多时间处理特定网站(流量较大的网站除外),他们使用工具在很多网站上发布广告。所以让你的FORM有点不寻常,(例如给用户一个图像说'1.5 + 2.4 =?'并让用户回答,这将阻止大多数垃圾邮件工具:))

答案 13 :(得分:-1)

我为阻止垃圾邮件发送者(迄今为止)100%一致性所做的最简单的事情就是验证提交的文本。如果您使用php函数strstr()检查“a href”或甚至是不可点击的http或www,那么您可以在其他地方重新路由垃圾邮件发送者。我实际上有一个脚本然后写入我的.htaccess文件以拒绝违规的IP地址。不确定是否还有其他类型的垃圾邮件需要关注,但链接是我到目前为止所见过的。