Czy potrzebuję pola nonce dla każdego pola meta dodanego do mojego niestandardowego typu posta admin?


16

Obecnie pracuję na stronie administratora mojego niestandardowego typu posta i utknąłem przy podejmowaniu decyzji, czy ponownie dodać pole nonce dla drugiego metaboksu, czy nie. Nie znam się na niestandardowych typach postów, a wyszukiwanie w Internecie na ten temat nie daje tak wielu wyników.

jakieś pomysły? Dzięki.

Odpowiedzi:


13

Tak poleciłbym.

Masz (i powinieneś) mieć swój własny nonce, dzięki któremu możesz sprawdzić pochodzenie danych i zamiary użytkownika. Jeśli masz tylko jeden nonce dla metaboxa - wtedy napotkasz problemy, jeśli ten metabox zostanie usunięty (nie taki sam jak ukryty). Po usunięciu drugi metaboks nigdy (a przynajmniej nie powinien) nigdy nie zapisywał, ponieważ nonce jest już wysyłany.

Oczywiście, z punktu widzenia bezpieczeństwa, nic nie jest dodawane przez drugi nonce - chyba że kiedykolwiek zechcesz zaktualizować tylko jeden metaboks, a nie drugi: nonces powinny być unikalne dla akcji .


Edytować

Jak wskazano, istnieje tylko jeden formularz dla ekranu edycji postu. Teoretycznie potrzebujesz tylko jednego pola nonce, za pomocą którego można zweryfikować działanie i pochodzenie danych. Ponieważ jednak metaboksy można usunąć - posiadając pole nonce w tylko jednym metaboxie nie ma gwarancji, że będzie tam nonce. Umieszczając pole nonce w każdym metaboksie, możesz sprawdzić, czy dane z tego metaboksu zostały wysłane (i tak naprawdę pochodzą z twojego miejsca) przed przetworzeniem jakichkolwiek danych. Na przykład:

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

}

Nazwa pola nonce powinna być unikalna dla Metabox (nie koliduje z innymi nonces, które są obecne w postaci z innych wtyczek).

Nonce wartość powinna być unikalna dla działania (a to generalnie powinno obejmować pochodzenie danych (np edycji post, w przeciwieństwie do szybkiej edycji)). Ogólnie podam też identyfikator posta.


hmm ale <form>na stronie administratora jest tylko jeden tag. czy pole nonce powinno być unikalne dla formularza, czy nie? tia, @Stephen
Ana Ban,

Tak, więc nazwa nonce powinna być unikalna dla metaboxa, abyś mógł sprawdzić ją dla każdego metaboxa. Wartość jednorazowa powinna być unikalna dla wykonywanej akcji i źródła danych (np. Ponieważ „szybka edycja” i normalny ekran edycji wyzwalają save_postakcję).
Stephen Harris

zaktualizowana odpowiedź, aby, mam nadzieję, wyjaśnić, co mówię :)
Stephen Harris

Chodzi o to, 1) ponieważ jest tylko jeden znacznik Form dla całego ekranu edycji i 2) automatycznie dodaje do niego nonce . Dlaczego miałbyś dodawać więcej? Zawsze będzie miał nonce, bez względu na wszystko ... Zwróciłem na to uwagę w mojej odpowiedzi i oddaję głos, dziękuję ludziom ... Moim zdaniem, zamierzam edytować stronę według zawartości lub metadanych, np. jedno pole nonce ... Również gdy próbowałem dodać więcej, nie działa nawet z wieloma meta-boxami !!
OZZIE

1
Zobacz moją odpowiedź. save_postmożna wywoływać z różnych kontekstów, więc nie można zagwarantować nonce. Jest to również wygodny sposób sprawdzenia, czy połączenie zwrotne musi coś zrobić. Podczas dodawania wielu elementów jednorazowych używaj unikalnych nazw. To działa.
Stephen Harris

5

Możesz także zaczepić pole przesyłania, które nigdy nie zniknie, dodając do niego pole nonce

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

Następnie w akcji save_post:

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

1

Pole nonce służy do sprawdzenia, czy zawartość formularza pochodzi z lokalizacji na bieżącej stronie, a nie gdzie indziej.

codex: wp_nonce_field

wymagane jest tylko jedno pole nonce w formularzu , używaj więcej niż jednego, ponieważ dla mnie nie ma sensu.

być może możesz to sprawdzić i użyć check_admin_referer (), aby upewnić się, że twoja prośba pochodzi ze strony administratora


-1

W WP 3.5.2 Cała strona edycji jest owinięta znacznikiem formularza, więc NIE należy dodawać własnych znaczników formularza !! Jeśli nadal to zrobisz i spróbujesz dodać kolejne osobne niestandardowe pole meta, nie powiedzie się to podczas zapisywania i doprowadzi cię tylko do wp-admin home podczas próby zapisania !!

NIE dodawaj również pola NONCE, ponieważ ma być tylko jeden na formularz (może to również spowodować, że się nie powiedzie !!) A edycja strony ma już pole nonce!

Edytować:

Chodzi o to, 1) ponieważ jest tylko jeden znacznik Form dla całego ekranu edycji, jak przyznał prawidłowy autor odpowiedzi, i 2) automatycznie dodaje do niego nonce . Dlaczego miałbyś dodawać więcej? Zawsze będzie miał nonce, bez względu na ...

Intencją jest, moim zdaniem, aby edytować stronę za treści lub meta danych , np. jedno pole nonce ... Również gdy próbowałem dodać więcej, nie działa nawet z wieloma meta-boxami !! Jeden zadziała, a drugi zawiedzie i przekieruje użytkownika tylko do wp-admin home!


Odpowiedziałeś na dwa pytania, czy to było przypadkowe? Które z dwóch chciałeś odpowiedzieć?
Rarst

Przepraszam, przypadkowe, ten. Jeśli używasz komponentu firebug lub chrome widoku meta-boxu dodanego z tagiem formularza we wp 3.6, to automatycznie usuwa on zawijany w całym formularzu post. Więc jak to jest źle? Dlaczego więc miałbyś dodawać kilka pól nonce?
OZZIE

spróbuj, a zobaczysz
OZZIE
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.