Nonce doğrulama nasıl çalışır?


14

Wp_nonce_field'ın gizli alanda bir değer oluşturduğunu görebiliyorum.

<input type="hidden" id="message-send" name="message-send" value="cabfd9e42d" />

Ama wp_verify_nonce anladığım kadarıyla bu değeri kullanmıyor, ama yanlış olabilir.

Doğrulama için bir oturum belirteci kullanıyor gibi görünüyor.

$expected = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce'), -12, 10 );
 if ( hash_equals( $expected, $nonce ) ) 
  { return 1;  }

O zaman gizli alanda bir değer özelliğine sahip olmanın anlamı nedir?


1
$nonceOrada da değere sahipsiniz - $noncedeğer eksikse onay false değerini döndürür .
birgire

Evet, gördüm, ama sadece boş olup olmadığını kontrol eder, böylece bir şey olabilir
ed-ta

biz de $noncebu karşılaştırma değer var :hash_equals( $expected, $nonce )
birgire

Bu doğru. Ben değere odaklanıyordum.
ed-ta

Yanıtlar:


15

TL; DR

Kısacası, bu değeri ilk argüman olarak beklediğinden wp_verify_nonce() kullanır .

wp_verify_nonce() argümanlar

wp_verify_nonce() 2 argüman alır:

  1. $nonce
  2. $action

Gizli alandaki değer ( 'cabfd9e42d'örneğin) $nonce.

İlk argüman nonce'dir ve istekten gelir

Aslında, wp_verify_nonce()şu şekilde kullanılmalıdır:

// here I assume that the form is submitted using 'post' as method

$verify = wp_verify_nonce($_POST['message-send']);

Dolayısıyla, iletilen ilk argüman wp_verify_nonce()tam olarak gizli alanda bulunan değerdir.

2. argüman: wp_create_nonce()yöntem

İkinci argümanla ilgili olarak, nonce değerini nasıl oluşturduğunuza bağlıdır.

Örneğin;

<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />

O zaman yapmanız gerekenler:

$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );

İkinci argüman, argüman olarak kullanılan şeydir wp_create_nonce().

2. argüman: wp_nonce_field()yöntem

Nonce'yi wp_nonce_field()like kullanarak oluşturduysanız :

wp_nonce_field( 'another_action', 'message-send' );

O zaman nonce'yi şöyle doğrulamanız gerekir:

$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );

Yani, bu sefer, eylem ilk argüman olarak geçen şeydir wp_nonce_field().

tekrarlamak

Geçmek için wp_verify_nonce()işleve 2 bağımsız değişken geçmesi gerekiyor doğrulama, bir başka olduğunu Nonce gizli alanındaki değer olan eylem ve nonce değeri inşa edildi bağlıdır.


4
@birgire Bir profesyonel gibi yazım hatası yapıyorum :)
gmazzap

2
En azından sitede bazı pro İngilizce editörleri olmayan yerli İngilizce daktilolar bizim yazım hataları, lol ;-) temizlemek yardımcı olur. Büyük açıklama BTW, +1
Pieter Goosen
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.