5

我已经在 Wordpress 上阅读了这个函数的参考,但我仍然不明白这个函数的真正作用。

我正在阅读有关在 wordpress 中创建元框的教程,并且我在保存数据的函数中有此代码:

if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
                return $post_id;
}

有人可以简要解释一下 wp_verify_nonce() 的含义吗?

4

1 回答 1

13

nonce 是一个“使用一次的数字”——WP 用来确保 POST 数据来自安全位置的代码。这有助于确保您的插件最终不会消化来自不安全来源的数据(请参阅跨站点请求伪造)。

Mark Jaquith的这篇博文有助于理解它们。

[nonce] 对于 WordPress 安装、WordPress 用户、操作、操作对象和操作时间(24 小时窗口)是唯一的。这意味着如果这些事情中的任何一个发生变化,nonce 都是无效的。因此,如果您(以某种方式)拦截了我正在使用的 nonce,首先,您将只有 24 小时的时间使用此密钥来试图欺骗我。

要创建一个 nonce,您必须给出wp_create_nonce一个特定的字符串,为 nonce 提供“上下文”。它给你一个字符串 - 随机数本身。然后,您将此 nonce 作为您的 POST 请求的一部分。然后接收页面应该使用相同的上下文创建自己的随机数,并查看它们是否匹配。

在这种情况下,给出的上下文是plugin_basename(__FILE__)。每当从同一个插件中调用它时,这将生成相同的字符串(参见此处)。

当您wp_verify_nonce收到在 Mark 指定的相同情况下创建的具有相同上下文字符串的 nonce 时,它​​返回 true。

简而言之:

!wp_verify_nonce

如果 wp_verify_nonce 返回 false,则返回 true。

($_POST[$meta_box['name'].'_noncename'], 

的第一个参数wp_verify_nonce:要检查的随机数。此代码从存储在 $_POST 全局中的发布请求中获取随机数。

plugin_basename(__FILE__) )

的第二个参数wp_verify_nonce:生成新随机数的上下文,将根据该上下文检查第一个随机数。

{ return $post_id; }

如果 nonce 不匹配,停止执行当前函数,返回变量$post_id

于 2011-08-25T10:43:57.110 回答