WordPress中文开发手册

WordPress主题开发 — 使用随机数

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

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

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

由nonce生成的一次性使用哈希通过验证上传请求是由当前登录的用户完成的,防止这种类型的伪造攻击成功。 随机数是唯一的唯一的当前用户的会话,所以如果尝试登录或退出页面上的任何随机变量无效。

创建一个随机数

  • wp_nonce_url() - 向URL添加一个随机数。
  • wp_nonce_field() - 向表单添加一个随机数。
  • wp_create_nonce() - 以自定义方式使用随机数; 用于处理AJAX请求。

验证随机数

  • check_admin_referer() - 验证在管理屏幕中URL或表单中传递的随机数。
  • check_ajax_referer() - 检查随机数(但不是引用),如果检查失败,则默认终止脚本执行。
  • wp_verify_nonce() - 验证在其他上下文中传递的随机数。

示例

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

创建随机数

要使用随机数保护窗体,请使用wp_nonce_field()函数创建一个隐藏的随机数字段:

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

验证随机数

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

if ( 
    ! isset( $_POST['name_of_nonce_field'] ) 
    || ! wp_verify_nonce( $_POST['name_of_nonce_field'], 'name_of_my_action' ) 
) {
 
   print 'Sorry, your nonce did not verify.';
   exit;
 
} else {
 
   // process form data
}

在这个例子中,基本的随机过程:

  • 使用wp_nonce_field()函数生成随机数。
  • 随机提交表单提交。
  • 使用wp_verify_nonce()函数验证有效性的随机数。 如果未验证请求退出并显示错误消息。