Özel yazı türü yöneticime eklediğim her meta kutu için nonce alanına ihtiyacım var mı?


16

Şu anda özel yazı türümün yönetici sayfasında çalışıyorum ve ikinci meta kutu için tekrar bir nonce alanı ekleyip eklememe konusunda karar verdim. Özel gönderi türlerinde çok yeniyim ve bu konuda çevrimiçi arama yapmak pek çok sonuç vermiyor.

Düşüncesi olan var mı? Teşekkürler.

Yanıtlar:


13

Bunu tavsiye ederim.

Verilerin kökenini ve kullanıcının amacını kontrol etmek için kendinize ait bir fikriniz var (ve öyle). Bir metabox için yalnızca bir nonce'niz varsa - o metabox kaldırılırsa (gizli ile aynı değildir) sorunla karşılaşırsınız. Kaldırılırsa, ikinci meta kutu, nonce daha uzun süre gönderildiği için asla kaydedilmez (veya en azından kaydetmelidir).

Elbette güvenlik açısından, ikinci bir nonce tarafından hiçbir şey eklenmez - diğerini değil, yalnızca bir meta kutusunu güncellemek istemezseniz: nonces , eyleme özgü olmalıdır .


Düzenle

Belirtildiği gibi yazı düzenleme ekranı için yalnızca bir form vardır. Bu nedenle, teoride, verilerin eylemini ve kökenini doğrulamak için sadece bir nonce alanına ihtiyacınız vardır. Bununla birlikte, meta kutular kaldırılabildiğinden - yalnızca bir meta kutuda nonce alanı bulunarak nonce'nin orada olacağının garantisi yoktur. Her meta kutuya bir nonce alanı yerleştirerek, herhangi bir veri işlemeden önce bu meta kutudan verilerin gönderilip gönderilmediğini (ve aslında bulunduğunu düşündüğünüz yerden) kontrol edebilirsiniz. Örneğin:

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

}

Adı nonce alanının METABOX özgü olması (ve diğer eklentileri ile ilgili formu ile mevcut olan diğer herhangi bir Nonce'lar çatışmayan) gerekir.

Nonce değeri eyleme özgü olmalıdır (ve bu genellikle verilerin kökenini içermelidir (örn. Hızlı düzenlemenin aksine edit-post)). Genellikle posta kimliğini de eklerim.


hı. ancak <form>yönetici sayfasında yalnızca bir etiket var. nonce alanı forma özgü olmalı ya da olmamalı mı? tia, @Stephen
Ana Ban

Evet, bu nedenle nonce adının metabox için benzersiz olması gerekir , böylece her metabox için kontrol edebilirsiniz. Nonce değeri, gerçekleştirilen eyleme ve verilerin kökenine özgü olmalıdır (örn. 'Hızlı düzenleme' ve normal düzenleme ekranı save_posteylemi tetiklediğinden ).
Stephen Harris

söylediklerimi umarım açıklamak için güncellenmiş cevap :)
Stephen Harris

1) tüm düzenleme ekranı için sadece bir Form etiketi olduğundan ve 2) otomatik olarak buna bir nonce eklenir. Neden daha fazlasını eklemelisin? Ne olursa olsun her zaman nezaketsiz olacaktır ... Cevabımda bunu belirttim ve aşağı düştüm, teşekkürler insanlar ... Niyetin, sayfayı içerik veya meta verilere göre düzenlemeyi düşünüyorum. bir nonce alanı ... Ayrıca daha fazla eklemeye çalıştığımda bile birden fazla meta-kutuları ile çalışmaz !!
OZZIE

1
Cevabımı gör. save_postçeşitli bağlamlardan çağrılabilir, bu nedenle bir nonce garanti edilmez. Ayrıca geri arama aslında bir şey yapmak zorunda kontrol etmenin uygun bir yoludur. Birden fazla nosyon eklerken benzersiz isimler kullanın. Çalışıyor.
Stephen Harris

5

Ayrıca, nonce alanını ekleyerek asla kaybolmayan gönderme kutusunu da kancalayabilirsiniz.

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

Ardından, save_post eyleminizde:

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

1

Nonce alanı, formun içeriğinin başka bir yerde değil, geçerli sitedeki konumdan geldiğini doğrulamak için kullanılır.

kodeks: wp_nonce_field

form başına yalnızca bir nonce alanı gereklidir, benim için anlamsız olandan daha fazlasını kullanın.

isteğinizin bir yönetici sayfasından geldiğinden emin olmak için check_admin_referer () yöntemini araştırabilir ve kullanabilirsiniz.


-1

WP 3.5.2'de tüm düzenleme sayfası bir form etiketine sarılmıştır, bu yüzden kendi form etiketlerinizi eklememelisiniz !! Hala bunu yapar ve başka bir ayrı özel meta kutusu eklemeye çalışırsanız, kaydederken başarısız olur ve kaydetmeye çalışırken sadece wp-admin home'a ​​yönlendirirsiniz !!

Ayrıca, form başına yalnızca bir olması gerekiyordu (bu da başarısız olabilir !!) Ve sayfa düzenleme zaten bir nonce alanı var!

Düzenle:

1) tüm düzenleme ekranı için doğru yanıt yazarının kabul ettiği gibi sadece bir Form etiketi olduğundan ve 2) otomatik olarak buna bir nonce eklenir. Neden daha fazlasını eklemelisin? Ne olursa olsun her zaman nonce olacaktır ...

Niyet düzenlemeye Bence içerik veya meta veri ile sayfası ör. bir nonce alanı ... Ayrıca daha fazla eklemeye çalıştığımda bile birden fazla meta-kutuları ile çalışmaz !! Biri işe yarayacak ve diğeri başarısız olacak ve kullanıcıyı sadece wp-admin home'a ​​yönlendirecek!


Aynı soruyu iki soruya da gönderdiniz, bu yanlışlıkla mı yapıldı? İkisinden hangisini cevaplamak istediniz?
Rarst

Üzgünüm, kazara. Wp 3.6'da form etiketi ile eklenen bir meta kutusunun kundakçı veya krom görünüm bileşeni kullanırsanız, yazı için tüm formda sarılmış olarak otomatik olarak kaldırılır. Peki bu nasıl yanlış? O zaman neden birkaç nonce alanı ekliyorsunuz?
OZZIE

deneyin ve göreceksiniz
OZZIE
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.