Write the Code. Change the World.

10月 10


 

WordPress 垃圾评论一直是超级多超级烦人的,如果没有有效的拦截方案,网站就会瞬间被每天几百条的垃圾评论淹没。

因为是每个 WordPress 站点都无法避免的问题,大家各显神通,做出的解决方案也挺多的,这里总结一下每种方法的特点和利弊:

一、识别垃圾评论

以 Akismet 插件为代表,根据评论内容或评论者的信息判断评论是否为垃圾评论,再决定是否拦截。开启后能拦截掉几乎所有垃圾评论,但这种方法最大的缺陷是误判,本站之前一直在用 Akismet 插件,误判的概率还是挺大的,即使经常去垃圾箱查看,偶尔一条的正常评论和一大堆垃圾评论一起混在垃圾箱也很容易被遗漏;其次会拖慢提交评论的速度,因为每条评论都要先被发到 Akismet 的国外服务器做识别。

 

二、禁止非中文评论

90%以上的垃圾评论都来自国外,所以这种方法可以拦截掉90%以上的垃圾评论,但缺点是无法发送纯表情和类似“2333”、“Thanks”这种正常评论了,而且中文的垃圾评论也无法拦截掉。

 

三、修改评论 post 地址

这种方法虽然看起来有点自欺欺人,但效果出奇地好,因为绝大部分的垃圾评论都是智障一样只知道通过 post 网站根目录的 wp-comments-post.php 来提交垃圾评论的。稍微麻烦一点的是 WordPress 每次升级都要重新修改。

 

四、人工验证插件

比如拖动解锁、拼图、验证码,效果是不错,但牺牲了用户体验,对小站来说没必要。

 

五、设置 token

本站现在换用了这种方法,原理是每次刷新页面,后端都会返回一个不同的 token 放到页面上任意位置,然后在合适的时机用 JavaScript 将 token 填充到一个隐藏的 input 里面,提交评论时将隐藏 input 的值(正常情况是 token)一起提交,后端通过判断该值是否合法来判断评论是不是通过正常途径提交的。虽然这种方法也是可以破解的,但破解难度明显高了很多,更重要的是 token 算法和隐藏 input 的结构容易更改,每次简单的小修改都可以让破解失效。

使用也很简单,将如下代码放到主题的 function.php 即可,代码如下:

以上代码来自 LEONA+ 和 JustYY.com

 

目前只找到这几种方法,欢迎补充。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

活捉 37 条
  1. 天然呆

    第五种方式的作者前来评论一下,这种方式不适合被CDN缓存,因为缓存可能导致token过期。在使用了CDN之后,我把代码修改成了在客户端生成token,并且需要用户主动点击,也可以生成。详见博客的评论框。

    1. 一只萌萌哒博主

      之前很奇怪为什么要多点击一下..原来是这样

      但为什么不设置在任意位置点击都可以生成 token 呢,这样可以减少一步呀~

      1. 天然呆

        主要是为了防止机器人通过模拟用户的方式来提交评论,多一个按钮对于真实用户来说没什么,但对于机器人来说就是天大的障碍了。

        1. 一只萌萌哒博主

          我的意思是这样:

          $(‘body’).on(‘click touch’, function () {
          // 生成并填充 token
          });

          1. 天然呆

            这样做的假设是普通用户会无意中点击页面,但实际上有可能一次都不点就提交评论了。这种情况下报错,对用户来说就莫名其妙了。如果点击评论框算是一次click的话,那么机器人也有很大的机率点一下,起不到防范的作用。

            1. 一只萌萌哒博主

              评论框也算点击;我一直在这样用,事实证明没有那么聪明的机器人23333

  2. Pingback: 评论本地化并为评论框添加 OwO 表情 | 梦之翼

  3. Pingback: WordPress 反垃圾评论多种方法分享 – 王旭个人博客

  4. Pingback: WordPress反垃圾评论大作战 | JUST FOR FUN