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


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.