被SPAM撑满数据库了

久没更新博客了,主要是目前社交平台太多,更新不过来了,而且博客这种我认为更神圣严谨的地方,发表文章更应该谨慎。

唉,说多了都是泪。近日,空间服务商通知我,我的站点太耗服务器CPU资源了,问我是不是挂了很多子网站,我当时就想去哭长城了,都好些个月没更新过的博客,怎么突然就高占用资源了呢?

遂一个个插件停用,把API代理也停用了,还是没发现问题所在。再分析下空间使用情况,发现是数据库自动备份的文件占用太多空间了,但是我记得我的数据库都不大的呀(文章不多),于是登陆去phpMyAdmin后台看看数据库,天呐!wp_comments表达到260MB,而wp_commentmeta表更是达到了1.2GB之巨!当时我就震精了。

仔细看看里面的数据,发现是Akismet插件生成的记录,转去WordPress后台看看垃圾评论…………28万!当时我就吓尿了。用WP自带的 清空垃圾评论 功能,发现它删除1000条左右就出错了,看来还是得去后台直接操作数据库。

 

1. 查看一下SPAM机器人的IP地址先(留着后面有用):

SELECT distinct comment_author_IP FROM wp_comments where comment_approved = ‘spam’

得出的记录导出成CSV文件。

 

2. 然后清理这些记录:

Delete from wp_comments where comment_approved = ‘spam’

 

3. 顺带清理wp_commentmeta表:

Truncate table wp_commentmeta

然后我以为整个世界就清净了,谁知道回去垃圾评论一看,竟然又开始增长了,才几分钟就二十来条了,我靠!难道我得罪了什么人?扪心自问,近来没抢人家女朋友,没吃霸王饭,没嫖霸王鸡……SPAM对我赶尽杀绝是为那般呢?

 


继续搜索防SPAM方法,然后试了下列几种方法:

 

1. 在 .htaccess加规则防止直接访问wp-comments-post.php

RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post.php
RewriteCond %{HTTP_REFERER} !.
darkhandz.com. [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.
) http://%{REMOTE_ADDR}/$ [R=301,L]

然后我发现根本没效果,垃圾评论还是会继续保持增长,股市能这样就好了。

 

2. 加个国人写的some Chinese please 插件

然后我发现我脑残了,人家的垃圾评论是很有技术含量的,中日英三国语言文字都有。

 

3. 利用IP filter 插件,把上面收集到的IP全部加入这个插件的名单里。

当然,上面导出的CSV文件还要处理一下,我是在Excel处理的,数据在A列,公式在B列如下:

=LEFT(A1,FIND(“.”,A1,FIND(“.”,A1,FIND(“.”,A1)+1)+1)) & “

然后填充一下,IP就变成了通配形式(112.94.23.)再填入IP filter来屏蔽了。我发现这种方法过滤效果达到95%左右(没有科学统计),但是几乎每天都有几个新的SPAM IP来参与垃圾评论,所以隔几天又得收集一下最新的SPAM IP加入插件的名单里,还是不方便。

 

4. 加个Captcha插件,提供验证码。

这个绝对是SPAM的天敌,不过也是不太受群众欢迎啦,某些网站里用的验证码让正常人都无法辨认,实在是伤天害理。

 

5. 全部暂停评论功能!

这个是完全没办法了,不能缨其锋就只能避其锋了……把wp-comments-post.php改个名字……

 

最后我是采用了第4种方法弄好了验证码插件,尽量简单的数字,只有乘法,我相信大家的乘法口诀都不错的。再观察一下垃圾评论,发现一个也没有了,嘿嘿……