Schlagwort-Archive: form

Nonces in WordPress

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.

Beispiel für wp_nonce_field in Formularen.

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:

Validierung der wp-nonce mit wp_verify_nonce.

Weiterführende Informationen:

Update vom 10. Juli. 2018:
In der Wikipedia gibt es jetzt eine Erklärung zum Begriff „Nonce“:
https://de.wikipedia.org/wiki/Nonce