Nonce est l'abréviation de nombre utilisée une fois Le nonce dans WordPress n'est pas un nombre, mais un hachage composé de chiffres et de caractères. Les valeurs peuvent non seulement être utilisées une fois, mais également avoir une durée de vie. Au cours de la durée de vie, le même paramètre générera la même valeur occasionnelle pour chaque utilisateur jusqu'à la fin de la durée de vie. Dans cet article, nous présenterons comment utiliser Nonce pour empêcher les attaques CSRF.
Créer un nonce
Le nonce peut être placé dans la requête Url ou dans l'élément caché d'un formulaire, puis utilisé via Javascript lors de la requête Ajax. Obtenez-le-le . Le cycle de vie d'un nom occasionnel ne concerne que la session en cours. Si vous vous déconnectez puis vous reconnectez, le nom occasionnel précédent sera également invalide.
Ajouter un nonce à l'URL
Vous pouvez ajouter un nonce à l'URL via la méthode wp_nonce_url() :
wp_nonce_url( $actionurl, $action, $name ); // 例如: $complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID );
où $bare_url (Sélection requise) est l'URL à laquelle le nom occasionnel doit être ajouté, et $action est le nom de l'action défini pour le nom occasionnel, facultatif, et la valeur par défaut est -1.
Par défaut, le nom du nonce généré dans le lien est _wpnonce. Afin d'éviter d'éventuels conflits, après la version 3.6 de WordPress, wp_nonce_url a ajouté un paramètre facultatif $name, qui permet aux utilisateurs de le spécifier eux-mêmes. nom du nonce dans le lien. Par exemple :
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID, 'my_nonce' );
Ajouter un nonce au formulaire
Vous pouvez ajouter un élément masqué au formulaire via la méthode wp_nonce_field() :
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 );
appel La méthode ci-dessus générera un code similaire au suivant :
<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" /> <input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />
Générer un nom occasionnel distinct
Si vous souhaitez simplement générer un nom occasionnel indépendant, vous pouvez transmettre wp_create_nonce() Méthode :
wp_create_nonce( $action ); // 例如: $nonce = wp_create_nonce( 'my-action_'.$post->ID );
De même, $action est un paramètre facultatif et la valeur par défaut est -1. La méthode ci-dessus renverra un résultat similaire à « 295a686963 ».
Vérifier la validité du nonce
Vérifier le nonce dans le formulaire
Dans l'interface de gestion Admin, vous pouvez utiliser le check_admin_referer méthode pour vérifier la validité du nom occasionnel dans l'URL :
check_admin_referer( $action, $query_arg );
Ce qui suit est un exemple montrant comment utiliser check_admin_referer pour vérifier le nom occasionnel dans le plug-in :
<form method="post"> <!-- some inputs here --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
Méthode de vérification :
check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );
Vérification nonce en Ajax
Si vous souhaitez vérifier la validité du nonce dans la requête Ajax, vous pouvez utiliser la méthode check_ajax_referer() :
check_ajax_referer( $action, $query_arg, $die )
$die spécifie s'il faut mettre fin à l'exécution du script si $nonce n'est pas valide. (La valeur par défaut est True)
Un exemple simple d'utilisation de 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>
Vérifiez à rebours avec le code suivant :
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(); }
Vérifiez le nom occasionnel généré indépendamment
1 wp_verify_nonce( $nonce, $action );