wp_verify_nonce vs check_admin_referer


21

Was ist der Unterschied, welchen soll ich verwenden?

Ich weiß, dass wp_verify_nonce das Zeitlimit überprüft, und check_admin_referer ich denke, ruft wp_verify_nonce auf und prüft auf ein Admin-URL-Segment, aber ich bin ein bisschen verwirrt, welches ich verwenden soll und wann.

Danke für die Klarheit.


1
Tumbleweed Abzeichen für diese Frage? "Ja wirklich?" Jemand?
— Jeff

Antworten:


29

Ich dachte , dass check_admin_refererdie Nonce geprüft (es tut Anruf wp_verify_nonce, und die Referrer - URL Nach in den Kern - Code Graben erkannte ich, dass es das nicht tat Denken es ein Fehler war ich es berichtet, und Ryan Boren antwortete mit folgendem..:

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 dann ü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.


Gute Grabarbeiten, danke, das bringt Klarheit.
— Jeff

5
Es gibt tatsächlich einen großen Unterschied, der sich auf die Verwendung auswirkt ... check_admin_referer bricht das gesamte Skript mit die () ab, wenn das Nonce nicht gültig ist, wp_verify_nonce hingegen gibt false zurück. Wenn es also bestimmte normale Umstände gibt, unter denen die Nonce fehlschlägt, verwenden Sie wp_verify_nonce, damit der Rest des Skripts weiterhin ausgeführt wird.
— SeventhSteel

@SeventhSteel - du hast natürlich recht. Meine Interpretation der Frage war, dass die Logik der Überprüfung von Nonces verglichen wurde und nicht, was passiert, wenn sie ungültig ist
— Stephen Harris

3

NEIN!!!

Verlassen Sie sich nicht darauf check_admin_referer, seien Sie vorsichtig!

  • Es beinhaltet wp_verify_nonenur für den Fall, wann _wpnonceeingestellt wurde !!!
  • In diesem Fall ist dies nicht der Fall DIE(). Stattdessen wird false zurückgegeben ...

Schauen Sie sich diesen Phseudocode an (die vollständige Quelle finden Sie 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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.