गैर सत्यापन सत्यापन कैसे काम करता है?


14

मैं देख सकता हूँ कि wp_nonce_field छिपे हुए फ़ील्ड में एक मान उत्पन्न करता है।

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

लेकिन जहाँ तक मैं बता सकता हूं wp_verify_nonce उस मूल्य का उपयोग नहीं कर रहा है, लेकिन मैं गलत हो सकता हूं।

ऐसा लगता है कि यह सत्यापन के लिए सत्र टोकन का उपयोग कर रहा है।

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

फिर छिपे हुए क्षेत्र में एक मूल्य विशेषता होने का क्या मतलब है?


1
आपको $nonceवहां मान भी मिल गया है - यदि $nonceमान गायब है तो चेक गलत देता है।
बिरगीरे

हाँ, मैंने देखा कि, लेकिन यह केवल जाँच करता है कि क्या यह खाली नहीं है इसलिए यह कुछ भी हो सकता है
ed-ta

हमें $nonceइस तुलना में भी मान मिला :hash_equals( $expected, $nonce )
21

यह सच है। मैं मूल्य पर ध्यान केंद्रित कर रहा था।
एड-

जवाबों:


15

टी एल; डॉ

संक्षेप में, उस मूल्य wp_verify_nonce() का उपयोग करता है क्योंकि यह उस मूल्य को अपने पहले तर्क के रूप में उम्मीद करता है।

wp_verify_nonce() बहस

wp_verify_nonce() 2 तर्क प्राप्त करता है:

  1. $nonce
  2. $action

छिपे हुए क्षेत्र में मान ( 'cabfd9e42d'आपके उदाहरण में) का प्रतिनिधित्व करते हैं $nonce

1 तर्क गैर है, और अनुरोध से आता है

वास्तव में, wp_verify_nonce()इस तरह इस्तेमाल किया जाना चाहिए:

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

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

तो पहला तर्क पास किया गया wp_verify_nonce()वह मूल्य है जो छिपे हुए क्षेत्र में मौजूद है।

दूसरा तर्क: wp_create_nonce()विधि

दूसरे तर्क के बारे में, यह इस बात पर निर्भर करता है कि आप गैर-मूल्य कैसे बनाते हैं।

जैसे अगर आपने किया:

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

फिर आपको करने की आवश्यकता है:

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

तो, दूसरा तर्क वह है जिसका उपयोग तर्क के रूप में किया गया था wp_create_nonce()

दूसरा तर्क: wp_nonce_field()विधि

यदि आपने गैर का उपयोग करके बनाया है wp_nonce_field():

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

फिर आपको इस तरह गैर को सत्यापित करने की आवश्यकता है:

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

इसलिए, इस बार, कार्रवाई जो भी पहले तर्क के रूप में पारित की गई है wp_nonce_field()

संक्षिप्त

wp_verify_nonce()सत्यापन को पारित करने के लिए आपको फ़ंक्शन के लिए 2 तर्क पारित करने की आवश्यकता है, एक गैर छिपे हुए क्षेत्र में मान है, दूसरा कार्रवाई है , और यह निर्भर करता है कि गैर मूल्य का निर्माण कैसे किया गया था।


4
@birgire मैं की तरह एक समर्थक :) टाइपो करना
gmazzap

2
कम से कम कुछ ऐसे अंग्रेजी समर्थक संपादक हैं जो हमारी गैर देशी अंग्रेजी टाइपर्स को हमारे टाइपोस, लोल ;-) को साफ करने में हमारी मदद करने के लिए साइट पर हैं। महान विवरण बीटीडब्लू, +1
पीटर गोयन ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.