Ausführliche Erklärung von Nonce in WordPress

藏色散人
Freigeben: 2021-03-12 11:40:48
nach vorne
4790 Leute haben es durchsucht

Die folgende Tutorial-Kolumne von WordPress wird Ihnen Nonce in WordPress vorstellen. Ich hoffe, es wird Freunden, die es brauchen, hilfreich sein.

Nonce in WordPress

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 );
Nach dem Login kopieren

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' );
Nach dem Login kopieren

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 );
Nach dem Login kopieren

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" />
Nach dem Login kopieren

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 );
Nach dem Login kopieren

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 );
Nach dem Login kopieren

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( &#39;name_of_my_action&#39;, &#39;name_of_nonce_field&#39; ); ?>
</form>
Nach dem Login kopieren

Überprüfungsmethode:

check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );
Nach dem Login kopieren

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 )
Nach dem Login kopieren

$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>
Nach dem Login kopieren

Ü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();
}
Nach dem Login kopieren

Verifizieren Sie unabhängig generierte Nonce

1
wp_verify_nonce( $nonce, $action );
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung von Nonce in WordPress. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage