Nonce ist die Abkürzung für eine einmal verwendete Zahl. Die Nonce von WordPress ist keine Zahl, sondern eine Folge von Hash-Werten, die aus Zahlen und Zeichen bestehen. Es gibt aber auch einen Lebenszyklus (Lebensdauer). Während des Lebenszyklus generiert derselbe Parameter für jeden Benutzer denselben Nonce-Wert bis zum Ende des Lebenszyklus. In diesem Artikel stellen wir vor, wie Sie Nonce verwenden, um CSRF-Angriffe zu verhindern.
Erstellen Sie eine Nonce
Nonce kann in der URL-Anfrage oder im versteckten Element eines Formulars platziert werden und dann während der Ajax-Anfrage über Javascript abgerufen werden. Der Lebenszyklus einer Nonce erstreckt sich nur auf die aktuelle Sitzung. Wenn Sie sich abmelden und dann erneut anmelden, ist auch die vorherige Nonce ungültig.
Nonce zur URL hinzufügen
Sie können eine Nonce zur URL über die Methode wp_nonce_url() hinzufügen:
wp_nonce_url( $actionurl, $action, $name ); // 例如: $complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID );
wobei $bare_url (erforderlich) die URL zum Hinzufügen von Nonce ist und $action für den Nonce-Aktionsnamen definiert ist, optional , der Standardwert ist -1.
Standardmäßig lautet der Name der generierten Nonce im Link _wpnonce. Um mögliche Konflikte zu vermeiden, hat wp_nonce_url einen optionalen $name-Parameter hinzugefügt, der es Benutzern ermöglicht, den Nonce im Link anzugeben. Zum Beispiel:
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID, 'my_nonce' );
Nonce zum Formular hinzufügen
Möglicherweise können Sie dem Formular über die Methode wp_nonce_field() ein verstecktes Element hinzufügen:
PHP wp_nonce_field( $action, $name, $referer, $echo ) //例如 : wp_nonce_field( 'delete-comment_'.$comment_id ); wp_nonce_field( $action, $name, $referer, $echo ) //例如 : wp_nonce_field( 'delete-comment_'.$comment_id );
Der Aufruf der obigen Methode generiert Code ähnlich dem folgenden:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" /> <input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />
Allein eine Nonce generieren
Wenn Sie nur eine unabhängige Nonce generieren möchten, können Sie die Methode wp_create_nonce() verwenden:
wp_create_nonce( $action ); // 例如: $nonce = wp_create_nonce( 'my-action_'.$post->ID );
Ebenso ist $action ein optionaler Parameter und der Standardwert ist -1. Die obige Methode gibt ein Ergebnis ähnlich „295a686963“ zurück.
Überprüfen Sie die Gültigkeit der Nonce
Überprüfen Sie die Nonce im Formular
In der Admin-Verwaltungsoberfläche können Sie die Gültigkeit der Nonce in der URL über die Methode check_admin_referer überprüfen:
check_admin_referer( $action, $query_arg );
Das Folgende ist Ein Beispiel zur Veranschaulichung der Verwendung des Plug-Ins. Verwenden Sie check_admin_referer, um Nonce zu überprüfen:
<form method="post"> <!-- some inputs here --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
Überprüfungsmethode:
check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );
Nonce in Ajax überprüfen
Wenn Sie die Gültigkeit von Nonce in einer Ajax-Anfrage überprüfen möchten, können Sie Folgendes verwenden: check_ajax_referer()-Methode:
check_ajax_referer( $action, $query_arg, $die )
$die gibt an, ob $nonce ungültig ist, ob die Skriptausführung beendet werden soll. (Standard ist True)
Ein einfaches Beispiel für die Verwendung von check_ajax_referer:
<?php //Set Your Nonce $ajax_nonce = wp_create_nonce( "my-special-string" ); ?> <script type="text/javascript"> jQuery(document).ready(function($){ var data = { action: 'my_action', security: '<?php echo $ajax_nonce; ?>', my_string: 'Hello World!' }; $.post(ajaxurl, data, function(response) { alert("Response: " + response); }); }); </script>
Überprüfen Sie rückwärts mit dem folgenden Code:
add_action( 'wp_ajax_my_action', 'my_action_function' ); function my_action_function() { check_ajax_referer( 'my-special-string', 'security' ); echo sanitize_text_field( $_POST['my_string'] ); wp_die(); }
Verifizieren Sie unabhängig generierte Nonce
1 wp_verify_nonce( $nonce, $action );