web-dev-qa-db-fra.com

wp_verify_nonce vs check_admin_referer

Quelle est la différence, lequel dois-je utiliser?

Je sais que wp_verify_nonce vérifie la limite de temps, et check_admin_referer, je pense, appelle wp_verify_nonce et recherche également un segment d'URL d'administrateur, mais je ne sais pas trop lequel utiliser et quand.

Merci pour la clarté.

20
Jeff

Je pensais que check_admin_referer vérifiait le nonce (il appelle wp_verify_nonce, et l'URL référant. Après avoir fouillé dans le code principal, j'ai réalisé que cela ne fonctionnait pas. Je pensais que c'était un bogue signalé Ryan Boren a répondu comme suit:

En fait, si le nonce est valide, le référant ne doit pas être vérifié. Le manque de fiabilité des référents est l’une des raisons pour lesquelles les nonces sont utilisés. Les nonces remplacent entièrement la vérification du référent. Nous ne vérifions le référent que lors du traitement de la condition de compatibilité ascendante -1. -1 signifie que quelqu'un n'utilise pas de nonces, nous nous en remettons à la vérification des référents. Cet usage est maintenant très rare. check_admin_referer () est mal nommé maintenant qu'il ne vérifie presque jamais les référents. Il serait préférable de nommer quelque chose comme check_nonce (), mais nous le conservons tel quel pour le dos et le bon vieux temps.

Donc, en fait, il n'y a pas de différence.

27
Stephen Harris

NON!!!

Ne comptez pas sur check_admin_referer, soyez prudent!

  • Il inclut wp_verify_none uniquement dans le cas où _wpnonce était défini !!!
  • Dans ce cas, il n’a pas DIE(). Au lieu de cela, il retourne faux ...

Regardez à travers ce phseudo-code ( la source complète est ici ):

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