wp_verify_nonce vs check_admin_referer

20

Quelle est la différence, lequel devrais-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, ni quand.

Merci pour la clarté.

    
posée Jeff 05.04.2012 - 18:45

2 réponses

25

Je pensais que check_admin_referer vérifiait le nonce (il appelle wp_verify_nonce , et l'adresse référente. Après avoir fouillé dans le code principal, je me suis rendu compte que c'était le cas. pensant qu’il s’agissait d’un bogue, je l’ai signalé et 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érants est l’une des raisons pour lesquelles les nonces sont   utilisé. Les nonces remplacent entièrement la vérification du référent. La seule fois où nous   vérifier le référent lors de la gestion de la compatibilité ascendante -1   état. -1 signifie que quelqu'un n'utilise pas de nonces alors nous retombons   à la vérification de référence. Cet usage est maintenant très rare.   check_admin_referer () est mal nommé maintenant qu'il ne le fait presque jamais   vérification de référent. Il serait préférable de nommer quelque chose comme   check_nonce (), mais nous le conservons tel quel pour le dos et le passé   le saké.

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

    
réponse donnée Stephen Harris 15.05.2012 - 22:13
1

NON !!!

Ne comptez pas sur check_admin_referer , soyez prudent!

  • Cela inclut wp_verify_none uniquement si _wpnonce était défini !!!
  • Dans ce cas, il ne s'agit pas de DIE() . Au lieu de cela, il renvoie false ...

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;
}
    
réponse donnée T.Todua 20.03.2017 - 22:01

Lire d'autres questions sur les étiquettes