利用 wp_create_nonce 实现 WordPress 屏蔽垃圾评论
WordPress 的站点,垃圾评论删都删不完,确实很烦人。一天几百条感觉都要把数据撑爆了,那么有什么方法能够防御这些垃圾评论呢?今天我给大家分享一个利用 wp_create_nonce 实现 WordPress 屏蔽垃圾评论的方法。
垃圾评论的来源
WordPress 中提交评论的文件主要是根目录下面的 wp-comments-post.php 文件,垃圾评论也是从这里进去的。这个页面的防御性比较低,只是一些比较基础的数据判断,这就给那些垃圾评论软件有了可乘之机。
一般的垃圾评论可以通过他们固有的 POST 请求工具,就可以轻轻松松的发布 N 条垃圾评论,比如下面的代码:
$url = "https://www.wenjiangs.com/wp-comments-post.php"; $args = array( 'body' => array( 'comment_post_ID' => '29', 'author' => rand(), 'email' => rand().'@'.rand().'.cc', 'url' => '', 'comment' => '这是一条垃圾评论'.rand(), ), ); //提交评论 $res = wp_remote_post($url, $args); if($res['response']['code']==404){ echo "POST评论成功!"; }else{ echo $res["body"]; }
屏蔽垃圾评论的方法
验证提交用户是否合法,是最控制评论源头的重要方式。比如评论都必须额外提交一个参数 a,其中参数 a 的值为 1,否则就拒绝评论。这个特点就很像用户评论必须提交密码才能评论。但是这个密码有个缺点,那就是所有的人都知道它的值是 1,也就没法达到正常验证的目的。如果能够生成一个随机的字符串,且每一个客户端都不一致,并且可以验证正确性,那么这才是真正的密码了。
幸好的是,强大的 WordPress 已经有这个功能了,wp_create_nonce()
可以生成一个随机的字符串,官方是这样描述的:
Generates and returns a nonce. The nonce is generated based on the current time, the $action argument, and the current user ID.
比如根据评论的文章 ID 来生成一个随机值,wp_create_nonce(post_ID)
生成 fc7c5ef6f3
。
生成评论随机值
一般主题都使用的是 WordPress 原生的 comment_form
函数,可以通过钩子生成这个随机值:
add_action("comment_form_top","wenshuo_comment_form_top"); function wenshuo_comment_form_top(){ global $post; $nonce=wp_create_nonce($post->ID); echo '<input type="hidden" name="comment_nonce" value="'.$nonce.'" />'; }
这样的话,就会在评论表单里生成一个隐藏的 input,并且 input 的值是一个随机值
验证评论随机值
生成了随机值,然后就可以在评论提交之后进行判断:
add_action('preprocess_comment','wenshuo_preprocess_comment'); function wenshuo_preprocess_comment($commentdata){ $comment_post_ID=$commentdata["comment_post_ID"]; $nonce=wp_create_nonce($comment_post_ID); if(!isset($_POST["comment_nonce"]) || $_POST["comment_nonce"]!==$nonce){ wp_die("请勿恶意评论!"); } }
上述代码就起到了防御评论的目的,如果用户没有提交随机值或者随机值不正确,那么它的评论就可以拒之门外。对那些评论发布机器来说,更是一个噩梦。
wp_create_nonce 是个很大的函数,它不仅可以用在评论的请求,甚至也可以用在 WordPress 里的任何 get、post 请求中。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论