Benötige ich ein Nonce-Feld für jedes Meta-Feld, das ich meinem benutzerdefinierten Beitragstyp admin hinzufüge?

16

Ich arbeite gerade an der Administrationsseite meines benutzerdefinierten Beitragstyps und habe mich nicht mehr entschieden, ob ich ein Nonce-Feld für die zweite Metabox erneut hinzufügen soll oder nicht. Ich kenne mich mit benutzerdefinierten Beitragstypen noch nicht aus und die Online-Suche liefert nicht wirklich so viele Ergebnisse.

Irgendwelche Gedanken? Vielen Dank.

Ana Ban
quelle

Antworten:

13

Ich würde es empfehlen.

Sie haben (und sollten) eine eigene Instanz, mit der Sie die Herkunft der Daten und die Absicht des Benutzers überprüfen können. Wenn Sie nur eine einzige Nonce für eine Metabox haben, treten Probleme auf, wenn diese Metabox entfernt wird (nicht dasselbe wie versteckt). Wenn entfernt, wird (oder sollte) die zweite Metabox niemals speichern, da die Nonce länger gesendet wird.

Aus Sicherheitsgründen wird durch eine zweite Nonce natürlich nichts hinzugefügt - es sei denn, Sie möchten jemals nur eine Metabox und nicht die andere aktualisieren : Nonces sollten für die Aktion eindeutig sein .


Bearbeiten

Wie bereits erwähnt, gibt es nur ein Formular für den Nachbearbeitungsbildschirm. Theoretisch benötigen Sie also nur ein Nonce-Feld, mit dem Sie die Aktion und den Ursprung der Daten validieren können. Da Metaboxen jedoch entfernt werden können - wenn nur in einer Metabox ein Nonce-Feld vorhanden ist, kann nicht garantiert werden, dass die Nonce vorhanden ist. Durch Platzieren eines Nonce-Felds in jeder Metabox können Sie überprüfen, ob Daten von dieser Metabox gesendet wurden (und woher sie stammen), bevor Sie Daten verarbeiten. Z.B:

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.
  }

}

Der Name des Nonce-Felds sollte für die Metabox eindeutig sein (und nicht mit anderen Nonces in Konflikt stehen, die in dem Formular von anderen Plug-Ins vorhanden sind).

Der Nonce- Wert sollte für die Aktion eindeutig sein (und dies sollte im Allgemeinen die Herkunft der Daten einschließen (z. B. "Beitrag bearbeiten" im Gegensatz zu "Schnellbearbeitung"). Ich gebe in der Regel auch die Post-ID an.

Stephen Harris
quelle
hmm. <form>Auf der Admin-Seite befindet sich jedoch nur ein Tag. Sollte das Nonce-Feld für das Formular eindeutig sein oder nicht? tia, @Stephen
Ana Ban
Ja, daher sollte der Nonce- Name für die Metabox eindeutig sein, damit Sie ihn für jede Metabox überprüfen können. Der Nonce-Wert sollte für die ausgeführte Aktion und die Herkunft der Daten eindeutig sein (z. B. da sowohl die Schnellbearbeitung als auch der normale Bearbeitungsbildschirm die save_postAktion auslösen ).
Stephen Harris
aktualisierte Antwort, um hoffentlich zu klären, was ich sage :)
Stephen Harris
Die Sache ist 1) da es nur ein Formular-Tag für den gesamten Bearbeitungsbildschirm gibt und 2) es wird automatisch ein Nonce hinzugefügt. Warum müssten Sie mehr hinzufügen? Es wird immer eine Rolle spielen, egal was passiert ... Ich habe in meiner Antwort darauf hingewiesen und wurde abgelehnt, danke Leute ... Meiner Ansicht nach ist die Absicht, die Seite nach Inhalt oder Metadaten zu bearbeiten, z. Ein Nonce-Feld ... Auch wenn ich versucht habe, mehr hinzuzufügen, funktioniert es nicht einmal mit mehreren Meta-Boxen !!
Ozzie
1
Siehe meine Antwort. save_postkann aus verschiedenen Kontexten aufgerufen werden, daher ist eine Nonce nicht garantiert. Dies ist auch eine bequeme Methode, um zu überprüfen, ob Ihr Rückruf tatsächlich etwas zu tun hat. Verwenden Sie beim Hinzufügen mehrerer Nonces eindeutige Namen. Es funktioniert.
Stephen Harris
5

Sie können auch die Submit-Box einbinden, die niemals verschwindet, indem Sie das Nonce-Feld hinzufügen

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

Dann in Ihrer Aktion save_post:

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

Das Feld nonce wird verwendet, um zu überprüfen, ob der Inhalt des Formulars von der Position auf der aktuellen Site stammt und nicht von einer anderen Stelle.

codex: wp_nonce_field

Es ist nur ein Nonce-Feld pro Formular erforderlich. Verwenden Sie mehr als eines, da dies für mich nicht sinnvoll ist.

Vielleicht können Sie check_admin_referer () untersuchen und verwenden , um sicherzustellen, dass Ihre Anfrage von einer Admin-Seite stammt

Tribalpixel
quelle
-1

In WP 3.5.2 ist die gesamte Bearbeitungsseite in ein Formular-Tag eingeschlossen, daher sollten Sie KEINE eigenen Formular-Tags hinzufügen !! Wenn Sie das immer noch tun und versuchen, eine weitere benutzerdefinierte Meta-Box hinzuzufügen, schlägt das Speichern fehl und führt Sie beim Speichern nur zu wp-admin home !!

Fügen Sie auch NICHT das Feld NONCE hinzu, da es nur ein Feld pro Formular geben soll (dies kann ebenfalls zum Fehlschlagen führen !!). Die Seitenbearbeitung enthält bereits ein Nonce-Feld!

Bearbeiten:

Die Sache ist 1) da es nur ein Formular-Tag für den gesamten Bearbeitungsbildschirm gibt, wie der richtige Antwortautor zugegeben hat, und 2) es wird automatisch ein Nonce hinzugefügt. Warum müssten Sie mehr hinzufügen? Es wird immer das Nonce haben, egal was ...

Die Absicht ist aus meiner Sicht, die Seite nach Inhalt oder Metadaten zu bearbeiten, z. Ein Nonce-Feld ... Auch wenn ich versucht habe, mehr hinzuzufügen, funktioniert es nicht einmal mit mehreren Meta-Boxen !! Einer wird funktionieren und der andere wird scheitern und nur den Benutzer zu wp-admin nach Hause weiterleiten!

OZZIE
quelle
Sie haben dieselbe Antwort auf zwei Fragen gepostet. War es ein Zufall? Welchen der beiden wollten Sie antworten?
Rarst
Entschuldigung, Zufall. Wenn Sie eine Firebug- oder Chrome-Ansichtskomponente einer Meta-Box verwenden, die mit einem Formular-Tag in WP 3.6 hinzugefügt wurde, wird automatisch ein Umbruch im gesamten Formular für den Beitrag entfernt. Wie ist das falsch? Warum würden Sie dann mehrere Nonce-Felder hinzufügen?
OZZIE
Probieren