WordPress评论区使用reCAPTCHA v3过滤机器垃圾评论

曾经博客一直有很多垃圾评论,后来发现垃圾评论都带有链接,于是在Wordpress设置中设定了当某条评论包含超链接时将其放入等待审队列。

然后每次打开博客后台总有一堆评论待审。。需要逐一打勾将其归入垃圾评论中,还是感觉太麻烦。。

好在最近发现了reCAPTCHA v3这个宝藏,它能静静地在背后观察用户的举动,随后给出一个分值,网站可自行根据分值采取不同行动

本来想简简单单寻找个Wordpress插件给评论区接入reCAPTCHA,然而居然只有reCAPTCHA v2的插件于是只能自己研究让博客评论区接入reCAPTCHA v3了,记录一下方法如下:

1、前端操作:编辑wp-includes目录下comment-template.php文件,在echo $args['comment_notes_after'];后插入

?><input type="hidden" name="token" id="token" value="" /><?php

在wp-content/themes/的主题文件夹下有当前主题header.php,在<?php wp_head(); ?>后插入以下代码从而加载reCAPTCHA v3的JS库

<script src="https://www.recaptcha.net/recaptcha/api.js?render=_reCAPTCHA_site_key_"></script>

编辑同在主题文件夹下的footer.php,在</div><!-- .site-content -->之后插入

<script>
var locked=0;
$('#commentform').submit(function(){
	if(locked) return true;
	lock("正在提交中……");
	locked=1;
	grecaptcha.execute('_reCAPTCHA_site_key_', {action: 'comment'}).then(function(token) {
		$('#token').val(token);
		$('#submit').click();
	});
	return false;
});
</script>

这样就可在提交时放入token字段给后端验证

2、后端操作:编辑博客目录下的wp-comments-post.php,在nocache_headers();后插入

$ch = curl_init("https://www.recaptcha.net/recaptcha/api/siteverify");
curl_setopt_array($ch,array(CURLOPT_HTTPHEADER=>array('Content-Type: application/x-www-form-urlencoded'),
	CURLOPT_POST=>1,
	CURLOPT_RETURNTRANSFER=>1,
	CURLOPT_POSTFIELDS=> http_build_query(array('secret'=>'_reCAPTCHA_secret_key_','response'=>$_POST['token'],'remoteip'=>$_SERVER['REMOTE_ADDR']))));

$chret=curl_exec($ch);
curl_close($ch);
$result=json_decode($chret,true);
if (!$result['success']) {
	$error='';
	foreach ($result['error-codes'] as $error_code) $error.=$error_code.'<br>';
	wp_die($error,
			__( 'Comment Submission Failure' )
			,array(
				'response'  => '406',
				'back_link' => true,
			));
}
if ($result['score']<0.5) 
	wp_die('请勿使用脚本进行评论',
			__( 'Comment Submission Failure' )
			,array(
				'response'  => '406',
				'back_link' => true,
			));

reCAPTCHA给出的$result['score']是真人概率,如果想严格点可以将代码里0.5这个阈值改高,反之如果想宽松点可以改低

测试:将阈值稍调高后打开页面,在console使用js脚本进行评论$('#comment').val('hi');$('#submit').click();成功拦下

希望以后那些垃圾评论能少些

《WordPress评论区使用reCAPTCHA v3过滤机器垃圾评论》有3个想法

  1. 在您的网站提供给用户的 HTML 代码中使用此网站密钥。
    此密钥用于您的网站和 reCAPTCHA 之间的通信。
    这两个key用哪个呢,求解)

    1. 两个key都要用到,代码中_reCAPTCHA_site_key_那里填入Google控制台给你的site key,代码中_reCAPTCHA_secret_key_那里填入Google控制台给你的secret key

  2. 太棒了以前一天两三条垃圾评论,采取这个措施之后到现在一周了,一条垃圾评论都没有

zhouii进行回复 取消回复

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

地方所限只列了这些常用的,但如果你打开例如https://tiny.zhouii.com/qqemoji/e888.gif发现不是404也可以手动加入[e888]之类的喔~