相信大部分用WordPress做博客/网站的用户都有这个问题,就是建筑前期的垃圾评论太多了~~~
不管是多么厉害的大神级博客,还是毫不起眼无人问津的小白博客,都很难逃脱垃圾评论的骚扰,并且大部分都是一些英文的留言内容。
在之前,我一直用的WordPress自带的Akismet
插件,有免费版的授权申请,并且效果还挺好的,大部分的垃圾评论都被拦截了,所以这个插件还是很值得推荐使用的。
但是Akismet
虽然能够拦截垃圾评论,但是每当进入后台看到目前有多少条垃圾评论的时候,我会忍不住点击清空所有垃圾评论,这样每隔段时间就要清理,对于懒人来说还是一种折磨。
在这种情况下,我们就不得不再找其他办法来解决这个问题了
最先想到的办法:禁IP
禁IP是最简单最快捷的办法了,对于长期只是用那么几个IP来发垃圾评论的来说是很有效的办法,但是,现在基本上没几个只是用固定IP来干这事的了,所以,直接PASS,这里就不贴代码了.
接着想到了:禁UA
通过分析访问日志,发现大部分的恶意评论用的都是固定的User Agent
,那么就可以通过禁止User Agent
来达到效果。实现的方法是修改网站conf配置文件,在server
大括号里面加上以下代码:
if ( $http_user_agent ~* "Mozilla/5.0 \(Windows NT 6.1; rv:26.0\) Gecko/20100101 Firefox/26.0") {
# 匹配$http_user_agent,如果为Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0 则返回403
return 403;
}
这对于使用固定UA的访问来说是很有效果的,但是很可能造成误伤,只要是匹配到这个UA的访问都会被返回403,所以对上面的代码进行了修改完善,通过缩小范围来屏蔽垃圾评论:
set $stop 0;
if ($request ~* "/wp-comments-post.php"){
set $stop "${stop}1";
}
if ($http_user_agent ~* "Mozilla/5.0 \(Windows NT 6.1; rv:26.0\) Gecko/20100101 Firefox/26.0"){
set $stop "${stop}2";
}
if ($stop = "012"){
return 403;
}
上面的代码可以实现只对访问wp-comments-post.php
的指定UA进行屏蔽。
可是这还不够,因为经过测试没过多久垃圾评论又出现了,很明显他们修改了UA了,所以这个方案还是不够完美。
通过COOKIE屏蔽
上面的方案失败了,其实也早知道上面的办法不是长久之计,只是没时间去搞这个,先应付一阵子也好。最后想到了通过COOKIE
来屏蔽,因为通过记录访客的cookie发现了垃圾评论是没有cookie的,所以这就简单了,只哟判定cookie为空就行,这里我只对wp-comments-post.php
的访问进行了判断,因为其他页面也判断的话还需要考虑排除各种搜索蜘蛛,这里我们只要拦截垃圾评论就行,所以最后的代码如下:
set $stop 0;
if ($request ~* "/wp-comments-post.php"){
set $stop "${stop}1";
}
if ($http_cookie = ""){
set $stop "${stop}2";
}
if ($stop = "012"){
return 403;
}
上面的代码加到网站conf配置文件,在server
大括号里面
最后
到这里基本上已经屏蔽了垃圾评论了,世界总算清净了!
可是这还是会有不完美的地方,比如我们现在可以很容易的记录网站的cookie了,所以对于cookie的解决方案还有完善的地方,比如通过页面JS前端添加一个指定的cookie,然后通过判断这个cookie来实现,因为对于目前的爬虫来说是识别不了JS的。
原创文章,如若转载,请注明出处:https://www.yibshu.com/article/2382.html