it-swarm.com.de

wp_verify_nonce vs check_admin_referer

Was ist der Unterschied, welchen soll ich verwenden?

Ich weiß, dass wp_verify_nonce das Zeitlimit überprüft und check_admin_referer, wie ich finde, wp_verify_nonce aufruft und nach einem Admin-URL-Segment sucht, aber ich bin ein bisschen verwirrt, welches ich wann verwenden soll.

Danke für die Klarheit.

20
Jeff

Ich dachte dass check_admin_referer das Nonce überprüft hat (es ruft wp_verify_nonce auf, und die verweisende URL. Nachdem ich mich in den Kerncode eingearbeitet hatte, stellte ich fest, dass dies nicht der Fall war und Ryan Boren antwortete mit:

Wenn das Nonce gültig ist, sollte der Referrer nicht überprüft werden. Die Unzuverlässigkeit von Referrern ist einer der Gründe, warum Nonces verwendet werden. Nonces ersetzen die Referrer-Prüfung vollständig. Der Referrer wird nur überprüft, wenn die -1-Abwärtskompatibilitätsbedingung behandelt wird. -1 bedeutet, dass jemand keine Nonces verwendet, sodass wir auf die Referrer-Überprüfung zurückgreifen. Diese Verwendung ist jetzt sehr selten. check_admin_referer () hat einen schlechten Namen, da es so gut wie nie eine Referrer-Überprüfung durchführt. Es würde besser so etwas wie check_nonce () heißen, aber wir behalten es, wie es ist, aus Gründen der Kompatibilität und der alten Zeiten.

Es gibt also tatsächlich keinen Unterschied.

27
Stephen Harris

NEIN!!!

Verlassen Sie sich nicht auf check_admin_referer, seien Sie vorsichtig!

  • Es enthält wp_verify_none nur für den Fall, dass _wpnonce gesetzt wurde !!!
  • In diesem Fall funktioniert DIE() nicht. Stattdessen wird false zurückgegeben ...

Schauen Sie sich diesen Phseudocode an ( vollständige Quelle ist hier ):

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