title: "GetYii 是如何防止垃圾内容" date: 2019-07-30T22:58:00+08:00 tags: ["经验分享"] draft: false
4 年多前 Yii 推出了 2.0 测试版,正好赶上年底,工作不忙,于是我抱着学习的态度写了一个开源论坛,那就是 GetYii。虽然后来没怎么维护了,但是还是会每天去逛逛。
最近发现有人在 GetYii 上发垃圾内容,灰产广告。这就不能忍了,这篇文章我就分享一下我是如何与他们『斗争』的。
<!--more-->为了防止垃圾评论我实施了以下方案,方案按照时间先后顺序排名。
因为 GetYii 注册没有做邮箱验证,注册门槛非常低,这也给 Spammer 提供了便利。我也懒得再加上注册验证邮箱的步骤了。于是我就采用了采用了删帖同时冻结用户账号的操作,这个是最简单的方案了,但也是最累的方案了。而且不能根治。Spammer 能做到大量发放垃圾广告估计也是写了脚本。很快我也放弃了这种方案。
Yii2 自带验证码功能,而且开发一个『设置新注册用户一定时长才可以发帖』功能也很快,这比开发『注册验证邮箱』实现起来快的多。但是这种方案非常的简单粗暴,很不友好,虽然现在 GetYii 发帖人少了,但是我也不愿意牺牲这种体验,很快我也放弃了这种方案。
反 span,用的最多的方案应该是贝叶斯垃圾邮件过滤,网上也有一些基于反垃圾内容的 SAAS 系统,前者对于我这个小网站,有点杀鸡用牛刀,后者因为要收费,对于小网站也没必要。
于是我就自己写了一个简单的反垃圾程序 - yiier/yii2-anti-spam,思路很简单,特点在于支持两种类型匹配:
目前 GetYii 就是用的这种方案,把『发帖验证码 && 设置新注册用户一定时长才可以发帖』方案去掉了,前期遇到垃圾内容先加敏感词库,再删内容,虽然刚开始辛苦点,但是有明显效果。
虽然上个方案已经有一点效果了,但是我又想到了可以限制发帖频率来限制 Spammer 发垃圾内容刷屏现象,因为正常用户是不会频繁发帖的,比方说现在 GetYii 就限制了发帖间隔为 1 个小时。
后期还可以检测到频繁发帖的用户进行屏蔽 IP 的方案。
想不到对于 GetYii 这么小流量的网站也会被 Spammer 盯上,但是如果想做个社区,此功能是必不可少的一部分。此外还有用户可以屏蔽其他用户功能。