ナンス検証はどのように機能しますか?


14

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;  }

次に、非表示フィールドに値属性を設定する意味は何ですか?


1
あなたは持っている$nonce場合は、チェックを返すの偽-そこに値を同様に$nonce値が欠落しています。
バージール

それは何でもかまいませんので、それは空にいない場合は、[はい、私はそれを見ましたが、それだけでチェック
ED-taの

$nonceこの比較でも値を取得しましたhash_equals( $expected, $nonce )
。– birgire

それは本当だ。私は価値に焦点を合わせていました。
ed-ta

回答:


15

TL; DR

つまり、その値を最初の引数として期待するため、その値をwp_verify_nonce() 使用します。

wp_verify_nonce() 引数

wp_verify_nonce() 2つの引数を受け取ります。

  1. $nonce
  2. $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()は、非表示フィールドに存在する値とまったく同じです。

2番目の引数:wp_create_nonce()メソッド

2番目の引数については、ノンス値の作成方法によって異なります。

たとえば、次の場合:

<?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' );

したがって、2番目の引数はの引数として使用されたものwp_create_nonce()です。

2番目の引数:wp_nonce_field()メソッド

wp_nonce_field()like を使用してnonceを作成した場合:

wp_nonce_field( 'another_action', 'message-send' );

次に、次のようにノンスを検証する必要があります。

$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );

したがって、今回は、アクションはに最初の引数として渡されたものwp_nonce_field()です。

要約

合格するにwp_verify_nonce()は、関数への2つの引数を渡す必要が検証を、一方が他方は、ナンス隠されたフィールドの値であり、アクション、およびナンス値が構築された方法によって異なります。


4
@birgire私はプロのようにタイプミスをします:)
gmazzap

2
少なくともこのサイトには、英語を母国語としないタイパーがタイプミスを修正するのを助けるためのプロ英語編集者がいます。素晴らしい説明BTW、+ 1
Pieter Goosen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.