问题描述
我可以看到 wp_nonce_field 在隐藏的字段中生成一个值。
<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
但是 wp_verify_nonce 根本就没有使用这个值,可能是错误的。
看起来它正在使用会话令牌进行验证。
$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
if ( hash_equals( $expected, $nonce ) )
{ return 1; }
那么隐藏字段中有一个值属性是什么意思?
最佳解决方案
长文慎入
简而言之,wp_verify_nonce()
使用该值,因为它期望该值作为其第一个参数。
wp_verify_nonce()
参数
wp_verify_nonce()
接收 2 个参数:
-
$nonce
-
$action
隐藏字段中的值 (在示例中为'cabfd9e42d'
) 表示 $nonce
。
第一个参数是随机数,来自请求
事实上,wp_verify_nonce()
必须像这样使用:
// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);
所以传递给 wp_verify_nonce()
的第一个参数就是隐藏域中存在的值。
第二个参数:wp_create_nonce()
方法
关于第二个参数,它取决于你如何构建随机数值。
例如。如果你这样做:
<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />
那么你需要做:
$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );
所以,第二个参数是用作 wp_create_nonce()
的参数。
第二个参数:wp_nonce_field()
方法
如果您使用 wp_nonce_field()
创建了随机数,如:
wp_nonce_field( 'another_action', 'message-send' );
那么你需要验证这样的随机数:
$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );
所以,这次,作为 wp_nonce_field()
的第一个参数,这个动作就是一切。
Recap
要通过 wp_verify_nonce()
验证,您需要将 2 个参数传递给该函数,其中一个是在 nonce 隐藏字段中的值,另一个是该操作,并且取决于如何构建随机数值。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。