web-dev-qa-db-fra.com

Confusion concernant Nonce et son utilisation dans les colonnes personnalisées pour enregistrer la valeur de la case à cocher dans Post Meta

Je crois qu'il y a plusieurs façons d'utiliser le nonce.

Récemment, j'ai utilisé wp_nonce_field('any_nonce_value');

ce qui crée un <input type="hidden" id="_wpnonce" name="_wpnonce" value="111bc61eba">

et cela pourrait être confirmé en utilisant check_admin_referer('any_nonce_value');

Une autre façon serait d'utiliser <input type="hidden" name="_wp_nonce_or_anything_we_desire" value="<?php echo wp_create_nonce('any_nonce_value'); ?>">

Nous pouvons vérifier cela en utilisant wp_nonce_verify($_POST['_wp_nonce_or_anything_we_desire'], 'any_nonce_value')

Ma compréhension du nonce est-elle correcte? Alors voici la confusion

Lorsque vous essayez de créer une métabox personnalisée, ajoutez des colonnes personnalisées, gérez les colonnes personnalisées et enfin enregistrez la publication. Où devons-nous passer le nonce. Pour rendre ma question plus claire.

Lorsque nous nous connectons à save_post, le code partiel suivant est suggéré à https://codex.wordpress.org/Plugin_API/Action_Reference/quick_edit_custom_box

 $_POST += array("{$slug}_edit_nonce" => '');
    if ( !wp_verify_nonce( $_POST["{$slug}_edit_nonce"],
                           plugin_basename( __FILE__ ) ) )
    {
        return;
    }

Devrions-nous créer un nonce personnalisé? en créant metabox? Ou devrions-nous simplement utiliser le slug de type de message personnalisé ici et le reste est géré par Wordpress? Dans l’attente de votre réponse utile, cela aidera, espérons-le, beaucoup d’autres comme moi! Merci.

1
Adnan

Lorsque vous essayez de créer une métabox personnalisée, ajoutez des colonnes personnalisées, gérez les colonnes personnalisées et enfin enregistrez la publication. Où devons-nous passer le nonce. Pour rendre ma question plus claire.

Ce n'est pas correct, vous ne devriez pas avoir besoin d'un nonce dans une metabox car toutes ces informations sont envoyées en une fois dans la demande complète lors de la mise à jour ou de la publication, et WP le gère déjà pour vous.

Je pense que la confusion est qu’il n’a jamais été expliqué ce contre quoi un nonce est censé protéger et pourquoi il est utilisé.


À l'époque de myspace, vous pouviez insérer une balise d'image dans votre profil et définir src="http://myspace.com/logout". Toutes les personnes ayant consulté votre profil seraient alors déconnectées.

Un nonce, en revanche, est une valeur sensible au temps, qui protège contre cela en garantissant que vous avez cliqué sur le bouton, ou fait la chose parce que vous avez réellement cliqué sur la chose, et non à cause d'une attaque CSRF.

Donc, si vous faites quelque chose qui fait quelque chose, alors oui, utilisez un nonce. Si vous ne faites que lire des valeurs, alors non, ce n'est pas nécessaire. Plus d'un nonce n'apporte pas de protection non plus, d'où des métaboxes

De plus, check_admin_referer et wp_nonce_verify ne sont pas identiques:

  • wp_nonce_verify vérifie littéralement le nonce
  • check_admin_referer appelle wp_nonce_verify en interne, mais il fait aussi des choses en fonction du résultat. Il va quitter/abandonner s'il échoue et il vérifie également les valeurs du référent.
  • wp_nonce_verify ne vérifie que le nonce et renvoie vrai/faux, c'est à vous de faire quelque chose avec cette valeur

la même chose avec wp_create_nonce et wp_nonce_field

  • wp_create_nonce crée une valeur nonce. C'est à vous de faire quelque chose avec ça
  • wp_nonce_field génère un champ caché complet, appelle wp_create_nonce en interne et effectue d'autres tâches.

Pensez à eux comme à la différence entre buy_brick() et build wall()

1
Tom J Nowell