利用 wp_create_nonce 实现 WordPress 屏蔽垃圾评论 - 文章教程

利用 wp_create_nonce 实现 WordPress 屏蔽垃圾评论

发布于 2018-08-02 字数 2852 浏览 1815 评论 0

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 请求中。

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

目前还没有任何评论,快来抢沙发吧!

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

2583 文章
29 评论
84935 人气
更多

推荐作者

清风夜微凉

文章 1 评论 0

为你鎻心

文章 2 评论 0

xxhui

文章 0 评论 0

1PKOH46yx8j0x

文章 0 评论 0

Arthur

文章 0 评论 0