Nonce 令牌

WordPress nonce是由WordPress生成的一次性使用安全令牌,用于帮助保护URL和表单免受滥用。

如果你的主题允许用户提交数据,无论是在管理还是在前端,nonce可以用来验证用户是否打算执行操作,并有助于防止跨站请求伪造(CSRF)

例如,WordPress网站允许授权用户上传视频。作为授权用户,上传视频是一种有意行为,是被允许的。然而,在CSRF中,黑客可以劫持(伪造)授权用户的使用并进行欺诈性提交。

由nonce生成的一次性使用的哈希值通过验证上传请求是否由当前登录用户完成,从而防止此类型的伪造攻击。nonce只对当前用户的会话是唯一的,所以如果尝试登录或退出,页面上的任何nonce都会失效。

创建 Nonce

 

验证 Nonce

 

示例

在这个例子中,我们有一个基本的提交表单。

创建 Nonce

要使用nonce保护表单,请使用wp_nonce_field()函数创建隐藏的nonce字段:

<form method="post">
   <!-- some inputs here ... -->
   <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?>
</form>

验证 Nonce

在我们的示例中,我们首先检查nonce字段是否已设置,因为如果表单尚未提交,我们不希望运行任何操作。如果表单已经提交,我们使用nonce字段值函数。如果nonce验证成功,则将处理表单。

使用 wp_verify_nonce + wp_nonce_ays (你确定吗)

if (
    ! isset( $_POST['name_of_nonce_field'] )
    || ! wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action' )
) {
   wp_nonce_ays( '' );
} 
// process form data

或使用 check_admin_referer

 check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );
// process form data

在这些示例中,基本的nonce过程:

  1. 使用wp_nonce_field()函数生成nonce。
  2. nonce随表单提交一起提交。
  3. 使用wp_verify_nonce()check_admin_referer()函数来验证nonce的有效性。如果没有通过验证,请求将退出,并显示默认错误消息(不要显示精确错误信息)。

相关链接:插件开发手册:Nonce