web-dev-qa-db-ja.com

wp_verify_nonce対check_admin_referer

違いは何ですか?どちらを使用すればよいですか?

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

明快さをありがとう。

20
Jeff

I 思考 check_admin_refererがノンスをチェックしました(wp_verify_nonce 、および 参照URLを呼び出します。コアコードを調べた後、これはしていないことに気付きました。それに、Ryan Borenは次のように答えた。

実際には、nonceが有効であれば、参照元はチェックされるべきではありません。参照元の信頼性が低いことが、ナンスが使用される理由の1つです。 Nonceは参照元チェックを完全に置き換えます。参照元をチェックするのは、-1下位互換性条件を処理するときだけです。 -1は誰かがnonceを使用していないことを意味するため、参照元チェックにフォールバックします。この使用法は現在非常にまれです。 check_admin_referer()はリファラーチェックをほとんどしないため、名前が悪くなりました。それはcheck_nonce()のような何かもっと良い名前になるでしょうが、私達は昔のことと昔のためにそれをそのままにしておきます。

実際には違いはありません。

27
Stephen Harris

NO !!!

check_admin_refererを頼りにしないでください、注意してください。

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

この擬似コードを見てください( 完全なソースは here ):

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;
}
3
T.Todua