Ai-je besoin d'un champ nonce pour chaque méta-boîte que j'ajoute à mon administrateur de type de message personnalisé?


16

Je travaille actuellement sur la page d'administration de mon type de publication personnalisé, et je suis resté coincé sur la décision d'ajouter ou non un champ nonce pour la deuxième métabox. Je suis très nouveau dans les types de messages personnalisés, et la recherche en ligne à ce sujet ne donne pas vraiment autant de résultats.

Des pensées? Merci.

Réponses:


13

Je le recommanderais.

Vous avez (et devriez) avoir votre propre nonce avec lequel vérifier l'origine des données et l'intention de l'utilisateur. Si vous n'avez qu'un seul nonce pour une métabox - vous rencontrez des problèmes si cette métabox est supprimée (pas la même que cachée). Si elle est supprimée, la seconde métabox (ou du moins devrait) ne sera jamais enregistrée car le nonce est envoyé plus longtemps.

Bien sûr, du point de vue de la sécurité, rien n'est ajouté par un deuxième nonce - à moins que vous ne souhaitiez mettre à jour qu'une seule métabox et pas l'autre: les nonces doivent être uniques à l'action .


Éditer

Comme indiqué, il n'y a qu'un seul formulaire pour l'écran de post-édition. Donc, en théorie, vous n'avez besoin que d'un seul champ nonce avec lequel valider l'action et l'origine des données. Cependant, comme les métaboxes peuvent être supprimées - en ayant un champ nonce dans une seule métaboxe, rien ne garantit que le nonce sera là. En plaçant un champ nonce dans chaque métabox, vous pouvez vérifier si les données de cette métabox ont été envoyées (et proviennent en fait de l'endroit où vous pensez qu'elles sont) avant de traiter les données. Par exemple:

save_post_call_back($post_id){

  //Check this is not an auto-save route

  if(nonce of metabox1 present and valid){
     //Process data from metabox1
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

  if(nonce of metabox2 present and valid){
     //Process data from metabox2
  }else{
    //Either metabox removed - or invalid nonce. Take no action.
  }

}

Le nom du champ nonce doit être unique dans la métabox (et ne pas entrer en conflit avec les autres nonces présents sur le formulaire à partir d'autres plug-ins).

La valeur nonce doit être unique à l'action (et cela doit généralement inclure l'origine des données (par exemple, édition-publication par opposition à édition rapide)). J'inclus également généralement l'ID du message.


hmm. mais il n'y a qu'une seule <form>balise sur la page d'administration. le champ nonce doit-il être unique au formulaire ou non? tia, @Stephen
Ana Ban

Oui, le nom nonce doit donc être unique pour la métabox afin que vous puissiez le vérifier pour chaque métabox. La valeur nonce doit être unique à l'action effectuée et à l'origine des données (par exemple, car «l'édition rapide» et l'écran d'édition normal déclenchent tous deux l' save_postaction).
Stephen Harris

mise à jour de la réponse pour clarifier, espérons-le, ce que je dis :)
Stephen Harris

Le problème est 1) car il n'y a qu'une seule balise Form pour tout l'écran d'édition et 2) il y a automatiquement un nonce ajouté. Pourquoi devriez-vous en ajouter davantage? Il aura toujours le nonce quoi qu'il en soit ... Je l'ai souligné dans ma réponse et je suis rétrogradé, merci les gens ... L'intention est à mon avis de modifier la page par contenu ou métadonnées, par exemple. un champ nonce ... Aussi quand j'ai essayé d'en ajouter plus, cela ne fonctionne même pas avec plusieurs méta-boîtes !!
OZZIE

1
Voir ma réponse. save_postpeut être appelé à partir de divers contextes, donc un nonce n'est pas garanti. C'est également un moyen pratique de vérifier que votre rappel doit réellement faire quelque chose. Lors de l'ajout de plusieurs nonces, utilisez des noms uniques. Ça marche.
Stephen Harris

5

Vous pouvez également accrocher la boîte d'envoi qui ne disparaît jamais en y ajoutant le champ nonce

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

Ensuite, dans votre action save_post:

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;

1

Le champ nonce est utilisé pour valider que le contenu du formulaire provient de l'emplacement sur le site actuel et non ailleurs.

codex: wp_nonce_field

un seul champ nonce par formulaire est requis, utilisez plus d'un comme non sens pour moi.

vous pouvez peut-être enquêter et utiliser check_admin_referer () pour vous assurer que votre demande provient d'une page d'administration


-1

Dans WP 3.5.2 La page d'édition entière est enveloppée dans une balise de formulaire, vous ne devez donc PAS ajouter vos propres balises de formulaire !! Si vous faites toujours cela et essayez d'ajouter une autre boîte de méta personnalisée séparée, elle échouera lors de l'enregistrement et vous conduira uniquement à la maison wp-admin lorsque vous tenterez d'enregistrer !!

N'ajoutez PAS non plus le champ NONCE car il est censé n'en avoir qu'un par formulaire (cela pourrait également le faire échouer !!) Et la modification de la page a déjà un champ nonce!

Éditer:

Le problème est 1) car il n'y a qu'une seule balise Form pour tout l'écran d'édition, comme l'a admis l'auteur de la réponse correcte, et 2) il y a automatiquement un nonce ajouté. Pourquoi devriez-vous en ajouter davantage? Il aura toujours le nonce quoi qu'il arrive ...

L' intention est à mon avis de modifier la page par le contenu ou les métadonnées, par exemple. un champ nonce ... Aussi quand j'ai essayé d'en ajouter plus, cela ne fonctionne même pas avec plusieurs méta-boîtes !! L'un fonctionnera et l'autre échouera et ne redirigera l'utilisateur que vers wp-admin home!


Vous avez posté la même réponse sur deux questions, était-ce accidentel? Lequel des deux vouliez-vous répondre?
Rarst

Désolé accidentel, celui-ci. Si vous utilisez un composant Firebug ou Chrome View d'une meta box ajoutée avec un formulaire-tag dans wp 3.6, il est automatiquement supprimé et encapsulé dans le formulaire entier pour la publication. Alors, comment est-ce mal? Pourquoi voudriez-vous alors ajouter plusieurs champs nonce?
OZZIE

essayez-le et vous verrez
OZZIE
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.