维护小技巧|通过wp_create_nonce过滤大部分垃圾评论

维护小技巧|通过wp_create_nonce过滤大部分垃圾评论

前言:

每一个CMS系统,用户一旦多起来,垃圾评论就随之而来了,反垃圾评论是CMS开发中的一项必不可少的工作,WordPress官方专门开发了垃圾评论拦截的插件Akismet,基本上可以拦截绝大多数垃圾评论了。对于不想使用插件的用户,今天我们来介绍一种,简单高效的方法。

什么是wp_create_nonce?

wp_create_nonce是WordPresse跟据“当前时间、$action参数、和当前用户id“生成随机字符串的函数,提交表单时,WordPress会对这个随机字符串进行验证,如果提交的字符串相同,则证明本次提交是合法的提交。如下,我们添加一个名为comment_nonce的随机字符串到评论表单。

  1. //添加评论nonce到评论表单
  2. add_action(“comment_form_top”,“wizhi_comment_nonce”);
  3. function wizhi_comment_nonce(){
  4.     global $post;
  5.     $nonce = wp_create_nonce($post->ID); //生成nonce
  6.     echo ;
  7. }

垃圾评论是怎么来的?

网络上大部分垃圾评论是通过软件模拟提交评论产生的,垃圾评论软件通过模拟WordPress的评论数据(也就是昵称、邮箱、网址、评论这些数据),提交到WordPress。因为是软件操作的,提交评论的效率非常高,往往每分钟能达到成百上千条。

怎么通过wp nonce防止垃圾评论

垃圾评论软件提交的评论数据都是实现准备好的,其他的数据都可以事先写好,但是,因为comment_nonce这个数据是随机生成的数据,是没办法事先写好的。处理评论提交的时候,我们验证这个随机数据就可以了,如果验证通过,说明是正常的评论,否则就可以认为是垃圾评论,直接丢掉提交过来的评论数据就可以了。

  1. //处理评论数据
  2. add_action(‘preprocess_comment’,’wizhi_preprocess_comment’);
  3. function wizhi_preprocess_comment($commentdata){
  4.     $comment_post_ID=$commentdata[“comment_post_ID”];
  5.     $comment_content=$commentdata[“comment_content”];
  6.     //检查comment_nonce
  7.     $nonce = $_POST[“comment_nonce”];
  8.     if( !isset($_POST[“comment_nonce”]) || !wp_verify_nonce( $nonce$comment_post_ID ) ){
  9.         wp_die(“You are robot?”);
  10.     }
  11.     $comment_content=strip_tags($comment_content); //过滤html标签
  12.     return $commentdata;
  13. }

写在后面:

本功能我们使用了“wp_create_nonce“和“wp_verify_nonce“这两个WordPress函数,除了评论,你还可以在其他需要提交表单地方使用这个方法来验证合法提交,过滤非法提交,从而保证WordPress站点的安全。

本文参考于 https://www.wpzhiku.com/filter-spam-var-wp_create_nonce/  ,若有任何来源问题,请联系QQ:1516677079 及时更正。

最有意思的设计站点


最好的UI素材库

我们极力推荐: