Im WP-Kontext sind Nonces eine zufällige Aneinanderreihung von Zahlen und Buchstaben, die zwar mehrmals verwendet werden (im Gegensatz zur üblichen Implementierung von Nonces – Number used once), aber ein klar definiertes Ablaufdatum haben.
Wie bereits im Artikel WordPress Sicherheit bei Formulareingaben und AJAX Aufrufen – verwendet Nonces! beschrieben wurde, sollen Nonces dabei helfen, URLs und Formulare auf Websites vor missbräuchlicher Benutzung und anderem Unfug zu schützen.
Erstellung
URLs
werden mit wp_nonce_url( $actionurl, $action, $name ); aufgerufen.
- $actionurl ist die URL, die wir mit der Nonce „absichern“ wollen.
- required; Default: None
- $action ist der Name der action, die wir frei wählen können.
- optional; Default: -1
- $name ist der Name der so generierten Nonce.
- optional; Default: _wpnonce
Als Rückgabewert erhalten wir eine bereinigte URL mit zusätzlicher Nonce. Diese sieht in etwa so „http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204“ aus.
Forms
werden mit wp_nonce_field( $action, $name, $referer, $echo ); aufgerufen. Diese Funktion generiert uns bis zu zwei hidden input Elemente.
- $action definiert den Namen der action.
- optional, aber empfohlen; Default: -1
- $name ist der Name der so generierten Nonce.
- optional. Default: _wpnonce
- $referer gibt an, ob ein zusätzliches hidden input Element erstellt werden soll, das den Output der Funktion wp_referer_field beinhaltet.
- optional; Default: true
- $echo gibt an, ob die so erstellten inputs im HTML ausgegeben werden.
- optional; Default: true
Als Rückgabewert erhalten wir ein oder zwei hidden input Elemente, wenn $referer true ist.
Validierung
Allgemein
check_admin_referer( $action, $name ); überprüft sowohl die Nonce als auch den $referer.
- $action ist der Name der action, die wir frei wählen können.
- optional; Default: -1
- $name ist der Name der so generierten Nonce.
- optional; Default: _wpnonce
AJAX
check_ajax_referer( $action, $query_arg, $die ); überprüft nur die Nonce im Zuge eines AJAX-Requests.
- $action ist der Name der action, die wir frei wählen können.
- optional; Default: -1
- $query_arg ist der Name der so generierten Nonce
- optional; Default: false
- $die gibt an, ob das script angehalten werden soll, wenn die Überprüfung fehlschlägt
- optional; Default: true
Basic
wp_verify_nonce( $nonce, $action ); überprüft nur die Nonce.
- $nonce ist der Name der Nonce, die überprüft werden soll.
- required; Default: None
- $action ist der Name der action.
- optional; Default: -1
Eine einfache Überprüfung könnte z.B. so aussehen:
Weiterführende Informationen:
- https://codex.wordpress.org/WordPress_Nonces
- https://codex.wordpress.org/Function_Reference/wp_nonce_url
- https://codex.wordpress.org/Function_Reference/wp_nonce_field
- https://codex.wordpress.org/Function_Reference/check_admin_referer
- https://codex.wordpress.org/Function_Reference/check_ajax_referer
- https://codex.wordpress.org/Function_Reference/wp_verify_nonce
Update vom 10. Juli. 2018:
In der Wikipedia gibt es jetzt eine Erklärung zum Begriff „Nonce“:
https://de.wikipedia.org/wiki/Nonce