事出有因
WordPress 团队勤勤恳恳、兢兢业业、鞠躬尽瘁,版本升级到 5.8 了,不知道什么时候能赶上 Firefox 的版本。
强迫症患者当然被迫跟着升级。
每次升级完 WP 后,都要在根目录下的 wp-comments-post.php 文件里添加一句 return false;
,如果忘记了……
如果忘记了,打开 WP 后台就有大惊喜,比如这才升级完没多久就冒出一大堆垃圾评论了,都是机器人发的那种。。。
一直是用网上的 ajaxcomment 来防垃圾评论,当然,也只能防机器人垃圾评论,和有条件的人工评论,不过这也足够了,毕竟人工垃圾评论不会铺天盖地。
想来也不记得最初是谁搞出来的 ajaxcomment,好像当初有个大牛叫 @williankan 的是不是忘记了,接着印象中还有几个博友改过,最后用的应该是 @大发 的版本,@破袜子 做过一些修改貌似,具体是真不可考了。
然而因为自己 JS 水平太太太差,ajax 更是一头雾水,还得配合 php,这块一直没底,除了照抄还是照抄。
看着 WP 自带的评论 JS 那么顺滑,那么舒坦,而且使用不熟悉的 ajaxcomment 每次升级完 WP 一样都得手工略作修改,所以在做下一个主题时候决定放弃 ajaxcomment,用回 WP 自己的 comment-reply,并用土办法防止机器人垃圾评论。
土办法
机器人发垃圾评论是冲着 wp-comments-post.php 这个文件来的,而 WP 评论的 form 虽然依赖这个文件,但可以自定义,所以:
1、按照默认主题的方法加载 WP 的 comment-reply JS。
2、到 WP 安装根目录下复制一份 wp-comments-post.php,并重命名为任意名字,比如 wp-comments-postXXX.php。
4、删除 wp-comments-post.php 或在文件前面添加 return false;
。
5、打开主题文件夹的 comments.php,给 comment_form
添加修改 action
参数为上面第 2 步的新的文件地址,如:
comment_form(array('action' => site_url( '/wp-comments-postXXX.php' ),))
这样就能用着 WP 默认的 comment-reply JS,同时有效防止机器人发布的垃圾评论了。
不过,既然机器人发垃圾评论是冲着 wp-comments-post.php 这个文件,人家要是查看网页源代码,手动添加新的修改后的 wp-comments-postXXX.php 到机器人里,那也是没办法防的,想来应该没有这么无聊的垃圾广告人吧。
有个钩子叫upgrader_process_complete。自己存一个return的空文件,然后在钩子里加个函数,升级成功后用空白文件替换wp-comments-post.php就行了。
all in one security & firewall插件里有一个功能,禁止直接调用wp-comments-post.php文件提交评论,插件在.htaccess内写入识别规则,如果comment的refer为空,则403,评论无法提交。你可以试试这个插件,免费的,中文的。
用Akismet不就行了吗?
我的 typecho 已经被我改造过,增加了表单 token 校验,99%的 spam 机器人都可以被拦掉,安逸得很。
ajax 提交评论,nginx 禁止访问 wp-comments-post.php ,随便升级……
虚拟主机,没的折腾。
现在垃圾评论真是无孔不入,我的后台每天都有垃圾评论
你typecho 是更头疼。