曾经博客一直有很多垃圾评论,后来发现垃圾评论都带有链接,于是在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();成功拦下
希望以后那些垃圾评论能少些
在您的网站提供给用户的 HTML 代码中使用此网站密钥。
此密钥用于您的网站和 reCAPTCHA 之间的通信。
这两个key用哪个呢,求解)
两个key都要用到,代码中_reCAPTCHA_site_key_那里填入Google控制台给你的site key,代码中_reCAPTCHA_secret_key_那里填入Google控制台给你的secret key
太棒了以前一天两三条垃圾评论,采取这个措施之后到现在一周了,一条垃圾评论都没有