wp_verify_nonce vs check_admin_referer


21

Aradaki fark nedir, hangisini kullanmalıyım?

Wp_verify_nonce'ın zaman sınırını kontrol ettiğini ve check_admin_referer olduğunu düşünüyorum, sanırım wp_verify_nonce'i çağırmanın yanı sıra bir yönetici url segmenti için kontrol etmeyi düşünüyorum, ama hangisini ve ne zaman kullanmam gerektiğini biraz kafam karıştı.

Netlik için teşekkürler.


1
Bu soru için Tumbleweed rozeti? Gerçekten mi? Kimse?
Jeff

Yanıtlar:


29

Ben düşündüm o check_admin_referer(o çağrıyı yapar nonce kontrol wp_verify_nonce, ve .. Atıfta url çekirdek koduna kazma sonra ben bunu yapmadı fark ben rapor ve Ryan Boren aşağıdaki ile yanıtladı bir hata olduğunu düşünerek:

Aslına bakarsanız, kural geçerli değilse yönlendirici kontrol edilmemelidir. Yönlendirenlerin güvenilmezliği, adayların kullanılmamasının sebeplerinden biridir. Nonces, yönlendirici kontrolünü tamamen değiştirir. Yönlendiriciyi kontrol ettiğimiz tek zaman -1 geriye dönük uyumluluk koşulu ile çalışırken. -1 demek oluyor ki, birisi noces kullanmıyor, bu yüzden yönlendirme kontrolüne geri dönüyoruz. Bu kullanım şimdi çok nadirdir. check_admin_referer (), neredeyse hiçbir zaman yönlendirme denetimi yapmadığı için kötü bir şekilde adlandırılmıştır. Check_nonce () gibi bir şeye daha iyi bir ad verecekti, ancak eski zamanların hatırası için olduğu gibi tutuyoruz.

Yani aslında hiçbir fark yoktur.


Güzel kazma işi, teşekkürler, bu biraz açıklık getiriyor.
Jeff

5
Kullanımı etkileyen büyük bir fark var ... check_admin_referer, eğer geçerli değilse geçerli olan tüm betiği die () ile öldürür, oysa wp_verify_nonce yanlış döndürür. Yani, noce'nin başarısız olacağı belirli normal durumlar varsa, bp_verify_nonce komutunu kullanın, böylece betiğin geri kalanı hala çalışır.
SeventSteel

@SeventhSteel - elbette haklısın. Sorumu yorumlamam, geçersiz olduklarında gerçekleşmek yerine, iskontoları kontrol etmenin mantığının karşılaştırılmasıydı
Stephen Harris

3

YOK HAYIR!!!

Güvenme check_admin_referer, Dikkatli ol!

  • Sadece wp_verify_nonene zaman _wpnonceayarlanmış durumda içerir !!!
  • Bu durumda, öyle değil DIE(). Bunun yerine, yanlış döndürür ...

Bu sahte kodu inceleyin ( tam kaynak burada ):

function check_admin_referer( $action = -1, $query_arg = '_wpnonce' ) {
    .....
    $result = isset($_REQUEST[$query_arg]) ? wp_verify_nonce($_REQUEST[$query_arg], $action) : false;
    do_action( 'check_admin_referer', $action, $result );
    if ( ! $result && ! ( -1 == $action && strpos( $referer, $adminurl ) === 0 ) ) {
        die(...);
    }
    return $result;
}
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.