WordPress 如何应对垃圾评论?

2014 年 8 月 16 日
 vicalloy
WordPress的垃圾评论真是泛滥成灾,每天都有超多的垃圾评论。
已经启用Akismet,垃圾评论基本上可以全部拦截掉。
但问题是主机资源比较有限,不时会收到主机商发来的issue,提示MySQL由于处理时间太长被kill掉。
各位是怎么处理垃圾评论的问题的?

PS:
估计很多朋友会建议换其他系统,这就不折腾了。用WordPress最大的好处就是省心。
4494 次点击
所在节点    问与答
25 条回复
Automan
2014 年 8 月 17 日
我用 disqus。。
kmvan
2014 年 8 月 17 日
一个验证码就ok了
hjc4869
2014 年 8 月 17 日
SI CAPTCHA
yylzcom
2014 年 8 月 17 日
我会建议你优化mysql或者换主机商
Showfom
2014 年 8 月 17 日
我直接用多说了。。
Jat001
2014 年 8 月 17 日
我以前写过一个很2的脚本…… https://gist.github.com/jat001/8639850
kavinyao
2014 年 8 月 17 日
按照lz的情况还是升级VPS吧,没有两全其美的事情。
seki
2014 年 8 月 17 日
我自己在用 Stop Spammer Registrations Plugin 以及 Captcha 两个插件,没有用 Akismet。拦截率还行,很少有漏过去的。

占用资源大不大倒是不清楚……蹭的别人的 VPS
sandtears
2014 年 8 月 17 日
硬件升级成本又不高,升级硬件呗。
zjgood
2014 年 8 月 17 日
@seki 楼主可能觉得akismet拦截太慢了吧,评论提交之后会卡住一会儿才显示。不知道V友你介绍的插件判断得快吗
zjgood
2014 年 8 月 17 日
@Showfom 多说太不稳定了吧。而且巨丑。但是disqus很多人又不会用。。。
WildCat
2014 年 8 月 17 日
@zjgood disqus有中文版,话说我认为不会用它的用户不是我的目标用户
Pete
2014 年 8 月 17 日
不知道为啥我一直没有垃圾评论 没用插件
先禁止纯英文评论 然后ajax发表
然后就不知道为什么了。。
zjgood
2014 年 8 月 17 日
@Pete 直接禁止中文和日文。。。我试试还有垃圾评论不
hsiayc
2014 年 8 月 17 日
Disqus在手机浏览器上显示失败,访客评论没有邮件通知,还是原生自带最好。
jakehu
2014 年 8 月 17 日
装个多说搞定
xenme
2014 年 8 月 17 日
我以前每天要清理两次垃圾评论,现在基本没见过垃圾评论了:
1. 禁用纯英文的回复,直接后台加个正则匹配就好,这样基本可以拦截大部分垃圾评论
2. 后台设置过滤的关键词: http, www, .com, .net 类似
这是最简单的,做了这两个之后,基本能拦住大部分关键字,但是还是有些机器人会直接 post 或者通过 ping back、trackback 来发送垃圾评论。
然后我找到一个终极解决方法:
把评论的提交的地址从wp-comments-post.php改成wp-comments-post2.php,然后在前台的评论表单上在输入评论的内容里面做 onfocus 事件,当 focus 后,把默认的post action 改成正确的就好了。机器人的话,基本都是直接提交到原来的地址,肯定没法提交。正常人,肯定要输入,那么一定会触发 onfocus,那么肯定可以正确提交。
改完之后,加上 disable pingback/trackback,就再没有收到过垃圾评论。
-------
以上只能防机器人,要是有人专门搞你的站,那没办法。不过就我们这种访问量小的可怜的,估计没人闲得搞你。
Mihuwa
2014 年 8 月 17 日
官网上是这样做的,也能防暴力破解后台。当然针对的是采用POST提交的方式:

# Stop spam attack logins and comments
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .(wp-comments-post|wp-login)\.php*
RewriteCond %{HTTP_REFERER} !.*example.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) http://%{REMOTE_ADDR}/$ [R=301,L]
</ifModule>

如果是Nginx使用一下:

location ~* (wp-comments-posts|wp-login)\.php$ {
if ($http_referer !~ ^(http://example.com) ) {
return 405;
}
}

记得把example换成自己的域名
fox
2014 年 8 月 17 日
用第三方评论系统,禁用系统评论。
比如disqus和多说
seki
2014 年 8 月 17 日
@zjgood 没做过监控。我单纯就是觉得 Akismet 太麻烦才不用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/128317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX