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é.
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.
Ne comptez pas sur check_admin_referer
, soyez prudent!
wp_verify_none
uniquement dans le cas où _wpnonce
était défini !!!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;
}