如何保护我的论坛免受垃圾邮件的侵害?
Posted
技术标签:
【中文标题】如何保护我的论坛免受垃圾邮件的侵害?【英文标题】:How do I protect my forum against spam? 【发布时间】:2010-10-03 20:40:48 【问题描述】:我在自己掌握的网站上有一个论坛,该论坛每天都会收到垃圾邮件。目前我删除垃圾邮件并阻止IP。但这不是很好。被阻止的 IP 列表正在迅速增长,但论坛中的垃圾帖子数量也在迅速增长。
论坛完全是我自己的代码。它是用 php 和 mysql 构建的。
阻止垃圾邮件的具体方法有哪些?
编辑 我忘了提的是,论坛需要对未注册用户开放才能发帖。有点像博客评论。
【问题讨论】:
【参考方案1】:在任何人回复发送到其注册电子邮件地址的电子邮件之前,不要让他们发帖。您会看到许多论坛和邮件列表会生成一个唯一的电子邮件地址或网址,该电子邮件地址或网址会发送到新用户给定的电子邮件地址,他们必须回复电子邮件或单击链接才能完成注册。
【讨论】:
【参考方案2】:我知道哪种方法有效的一种方法是在提交表单之前使用 javascript。例如,将方法从 GET 更改为 POST。 ;) 垃圾邮件机器人在执行 JavaScript 方面很糟糕。当然,这也意味着非 Javascript 的人将无法使用您的网站……如果您关心他们的话。 ;)(注意:我没有)
【讨论】:
我经常将表单的动作留空,并在脚本中设置。【参考方案3】:您可以使用验证码,有一些不错的脚本,例如 PHPCaptcha,或者使用垃圾邮件控制服务,例如 Akismet,它们有 PHP API。
【讨论】:
【参考方案4】:您可能想查看this question,其中有几个答案描述了如何实现非侵入式验证码。
要考虑的另一件事是在帖子之间留出时间以防止大量垃圾邮件。
【讨论】:
【参考方案5】:在我编写的留言簿应用程序中,我实现了两个功能来防止大部分垃圾邮件:
不允许 POST 作为会话中的第一个请求
发帖时需要有效的 HTTP Refer(r)er
【讨论】:
我喜欢“不允许将帖子作为会话中的第一个请求”;谢谢 我比 CAPTCHA 更喜欢这类解决方案。 CAPTCHA 会给您所有的合法用户带来不便,而上述解决方案则不会。 "发布时需要一个有效的 HTTP Refer(r)er" 此外,HTTP Referer 不需要任何内容才能使调用有效。我想我可以关掉它。但是,您可以在加载表单时将某些内容放入会话中(并在 X 分钟内过期)。 我喜欢在第一个请求中拒绝 POST 的想法,但是网站上的 POST ajax 调用呢?如何允许 ajax 的直接 POST 请求,但不允许所有远程的?【参考方案6】:Captcha 绝对是最简单的方法 - 如果你想要一些 bot-proof 的东西,试试 KittenAuth(虽然这次我有 pandas)
Kitten Auth【讨论】:
【参考方案7】:根据我的经验,最好的简单防御来自于做一些“非标准”的事情。如果您使您的网站非标准,这使得任何自动垃圾邮件都必须专门为您的网站编码,这(没有冒犯)可能不值得付出努力。请注意,如果垃圾邮件来自人类垃圾邮件发送者,那么您实际上无法做任何事情来阻止合法的海报。因此,我们的目标是找到一种解决方案,可以抛弃任何“标准”帖子——即“填写整个表单并推送提交”。
您可以尝试的几个例子:
有一个隐藏的表单域,其名称听起来像是垃圾邮件发送者想要填写的内容,例如“网站”或“主页”或类似名称。如果表单字段被填写,请丢弃消息而不是发布它,因为它是一个自动填写整个表单的机器人,甚至是不可见的字段。 您不必使用“真正的”验证码,甚至可以使用简单的内容,例如“向后输入以下单词:”或“该网站的域名是什么?”。人类很容易做到,但它需要一个相当复杂的机器人来弄清楚要填写什么。【讨论】:
【参考方案8】:包括一个始终为“橙色”的验证码。
【讨论】:
【参考方案9】:没有单一的答案,因为垃圾邮件实际上是一个经济问题:将他们的东西放到网络上对某人来说值多少钱。但是,有些解决方案似乎还不错
Recaptcha 使用机器人填写的CCS to create an invisible field 在表单中创建一个特定时间的隐藏字段,以便 机器人不能一遍又一遍地使用相同的表格。【讨论】:
【参考方案10】:垃圾邮件可能来自机器人或人类 - 机器人更有可能。
要阻止机器人,请输入一个由 Javascript 填充的隐藏字段 - 没有为您的网站定制的标准、愚蠢的机器人有 99.5% 的可能性无法填写。
如果他们未能正确填写,请给他们一条消息,告诉他们需要 Javascript 或其他内容,并让他们有机会以其他方式发布(例如使用验证码或注册)。这样一来,不是垃圾邮件机器人的匿名用户(大多数情况下)仍然可以毫无问题地发帖,而大多数垃圾邮件机器人(不是为您的特定网站量身定制的)则不会。
不要费心将 IP 地址列入黑名单或使用第三方黑名单,这只会产生误报。几乎所有机器人都使用与(某些)合法用户相同的 IP 地址。
另一个技巧是在文本字段中添加一个听起来合理的名称,这在 CSS 中很难看到 - 任何在此字段中填写任何内容的人都被视为机器人。
【讨论】:
【参考方案11】:我想说的是,在大多数情况下,验证码足以阻止垃圾邮件发送者。 但请使用强大的,例如http://www.captcha.net/。
请记住,垃圾邮件发送者不想花太多时间处理特定网站(流量大的网站除外),他们使用一种工具在很多网站上发布广告。所以让你的 FORM 有点不寻常,(例如,给用户一张图片,上面写着 '1.5+2.4=?' 并让用户回答,这将阻止大多数垃圾邮件工具:))
【讨论】:
【参考方案12】:高级解决方案:
Akismet Defensio Sblam! (open source 以上克隆)你可以用非标准形式试试运气:
使用 CSS 隐藏的必须保持空白的字段 具有误导性名称的字段,例如<input name=email>
用于不是电子邮件的内容。
对我来说,CAPTCHA 就像放弃垃圾邮件发送者并让他们无论如何都会损害您的论坛 - 除了垃圾邮件损害,您会受到可用性和可访问性损害。
【讨论】:
【参考方案13】:我发现有些东西非常有效:禁止包含太多 URL(例如,5 个以上)的 cmets。从那以后,我的垃圾评论为零。
编辑: 自从撰写上述内容以来,我经常收到只有一个链接的垃圾评论。我现在添加了一些 honeypot fields 并且几个月来没有推荐垃圾邮件。
【讨论】:
【参考方案14】:为了阻止垃圾邮件发送者(到目前为止)100% 的一致性,我所做的最简单的事情是验证提交的文本。如果您使用 php 函数 strstr() 来检查“a href”甚至是不可点击的 http 或 www,那么您可以将垃圾邮件发送者重新路由到其他地方。我实际上有一个脚本,然后写入我的 .htaccess 文件以拒绝有问题的 IP 地址。不确定是否还有其他类型的垃圾邮件需要关注,但到目前为止我所看到的都是链接。
【讨论】:
一个不允许合法用户发布链接的论坛是非常没用的。以上是关于如何保护我的论坛免受垃圾邮件的侵害?的主要内容,如果未能解决你的问题,请参考以下文章
用于防止滥用的 Servlet 过滤器? (DoS、垃圾邮件等)
如何使用 NextJS API 在 Jest 单元测试中考虑 Google reCaptcha