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.

Jeff
quelle
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.

Stephen Harris
quelle
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;
}
T.Todua
quelle