我在Wordpress上读过这个函数的reference,但我仍然不明白这个函数到底是做什么的。
我正在阅读有关在wordpress中创建元框的教程,我在函数中包含了保存数据的代码:
if ( !wp_verify_nonce( $_POST[$meta_box['name'].'_noncename'], plugin_basename(__FILE__) )) {
return $post_id;
}
有人可以简要解释一下wp_verify_nonce()的含义是什么吗?
答案 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
。