wp_verify_nonce()是什么意思?

时间:2011-08-25 10:05:52

标签: wordpress meta-boxes

我在Wordpress上读过这个函数的reference,但我仍然不明白这个函数到底是做什么的。

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

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

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

1 个答案:

答案 0 :(得分:12)

nonce是'一次使用的号码' - WP用来确保POST数据来自安全地方的代码。这有助于确保您的插件不会最终消化来自不安全来源的数据(请参阅Cross-Site Request Forgery)。

This blog post by Mark Jaquith对于理解它们非常有用。

  

[nonces]对于WordPress安装,WordPress用户,操作,操作对象以及操作时间(24小时窗口)是唯一的。这意味着如果这些事情中的任何一个发生变化,则nonce无效。因此,如果你(以某种方式)拦截了我使用的nonce,你首先只需要24小时就可以使用这个密钥试图欺骗我。

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

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

当您的wp_verify_nonce收到在Mark指定的相同环境下创建的随机数时,使用相同的上下文字符串,它将返回true。

简而言之:

!wp_verify_nonce
如果wp_verify_nonce返回false,则

返回true。

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

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

plugin_basename(__FILE__) )

wp_verify_nonce的第二个参数:生成新nonce的上下文,将对其进行检查。

{ return $post_id; }

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