随机数验证是如何工作的?

时间:2015-07-12 作者:ed-ta

我可以看到wp\\u nonce\\u字段在隐藏字段中生成一个值。

<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />
但据我所知,wp\\u verify\\u nonce没有使用该值,但我可能错了。

看起来它正在使用会话令牌进行验证。

$expected = substr( wp_hash( $i . \'|\' . $action . \'|\' . $uid . \'|\' . $token, \'nonce\'), -12, 10 );
 if ( hash_equals( $expected, $nonce ) ) 
  { return 1;  }
那么在隐藏字段中有值属性有什么意义呢?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

TL;DR简而言之,wp_verify_nonce() uses 该值是因为它期望该值作为其第一个参数。

wp_verify_nonce() 参数

wp_verify_nonce() 接收2个参数:

  1. $nonce
  2. $action
隐藏字段中的值(\'cabfd9e42d\' 在您的示例中)表示$nonce.

第一个参数是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() 正好是隐藏字段中存在的值。

第二个参数:thewp_create_nonce() 方法

关于第二个参数,它取决于如何构建nonce值。

E、 g.如果您这样做了:

<?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().

第二个参数:thewp_nonce_field() 方法

如果使用wp_nonce_field() 例如:

wp_nonce_field( \'another_action\', \'message-send\' );
然后需要验证nonce,如下所示:

$verify = wp_verify_nonce( $_POST[\'message-send\'], \'another_action\' );
所以,这次,动作是作为第一个参数传递给wp_nonce_field().

重述以通过wp_verify_nonce() 验证您需要向函数传递两个参数,一个是nonce hidden字段中的值,另一个是action,这取决于nonce值的构建方式。

结束

相关推荐

wp_verify_nonce keeps failing

我需要从前端分配要发布的类别,所以我正在使用该解决方案suggested in this thread , 以插件的形式。它正在按预期工作。我只是想添加一个nonce字段,以使其更加安全。到目前为止,我似乎还没能让它正常工作,因为我一直在说“对不起,你的暂时消息没有得到证实。”。下面给出了完整的代码,包括我所做的更改,这些更改位于第42行和第103行。这里还有一个link to pastebin thread , 以防您需要识别线路。在这两行中,我都试图从this wordpress page .请看一看