wp_verify_nonce vs check_admin_referer


21

違いは何ですか、どちらを使用する必要がありますか?

私はwp_verify_nonceが時間制限をチェックし、check_admin_refererがwp_verify_nonceを呼び出し、管理URLセグメントをチェックしていることを知っていますが、どのセグメントをいつ使用すべきかについて少し混乱しています。

明快にありがとう。


1
この質問のタンブルウィードバッジ?本当に?誰でも?
ジェフ

回答:


29

私が思ったことはcheck_admin_referer(それがコールしnonceを確認しwp_verify_nonceそして。。それは私がそれを報告したバグだと思っコアコードを掘り下げるた後、私はそれがこれをしなかったことに気づき参照元URLを、そしてライアン・ボレンは、次のように答えました:

実際、ナンスが有効な場合、リファラーはチェックされません。リファラーの信頼性の低さは、ナンスが使用される理由の1つです。ナンスは、リファラーチェックを完全に置き換えます。リファラーをチェックするのは、-1下位互換性条件を処理するときだけです。-1は、誰かがナンスを使用していないことを意味するため、リファラーチェックにフォールバックします。現在、この使用法は非常にまれです。check_admin_referer()は、リファラーチェックをほとんど実行しないため、名前が間違っています。check_nonce()のような名前を付けた方が良いでしょうが、バックコンパチや昔のためにそのままにしておきます。

したがって、実際には違いはありません。


すてきな掘削作業、ありがとう、それはいくつかの明確さをもたらします。
ジェフ

5
実際には、使用に影響する大きな違いが1つあります... check_admin_refererは、nonceが無効な場合はdie()でスクリプト全体を強制終了しますが、wp_verify_nonceはfalseを返します。したがって、nonceが失敗する特定の通常の状況がある場合は、wp_verify_nonceを使用して、スクリプトの残りの部分が引き続き実行されるようにします。
SeventhSteel

@SeventhSteel-もちろんあなたは正しい。質問の私の解釈はナンスをチェックするロジックはむしろ何が起こるかよりも、比較されていたということであったとき、その無効
スティーブン・ハリス

3

いいえ!!!

期待しないcheck_admin_refererでください、注意してください!

  • 設定さwp_verify_noneれた場合にのみ含まれます_wpnonce!!!
  • その場合、それはしませんDIE()。代わりに、falseを返します...

このphseudo-codeをご覧ください(完全なソースは こちら):

function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    .....
    $result = isset($_REQUEST[$query_arg]) ? wp_verify_nonce($_REQUEST[$query_arg], $action) : false;
    do_action( 'check_admin_referer', $action, $result );
    if ( ! $result && ! ( -1 == $action && strpos( $referer, $adminurl ) === 0 ) ) {
        die(...);
    }
    return $result;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.