ননস যাচাইকরণ কীভাবে কাজ করে?


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মানটি অনুপস্থিত থাকলে চেকটি মিথ্যা বলে।
বার্জায়ার

হ্যাঁ, আমি এটি দেখেছি, তবে এটি খালি না থাকলে কেবল এটি পরীক্ষা করে যাতে এটি কিছু হতে পারে
এড-টা

আমরা পেয়েছিলাম $nonce: এই তুলনায় মানhash_equals( $expected, $nonce )
birgire

সেটা সত্য. আমি মান উপর ফোকাস ছিল।
এডি-টা

উত্তর:


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()হুবহু মানটি যা লুকানো ক্ষেত্রে উপস্থিত রয়েছে is

২ য় তর্ক: 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 আমি প্রো এর মতো টাইপ করি :)
গাজাজাপ

2
কমপক্ষে সাইটে অল্প কিছু ইংরেজী সম্পাদক রয়েছেন যা আমাদের অ-নেটিভ ইংলিশ টাইপররা আমাদের টাইপগুলি পরিষ্কার করতে সহায়তা করে, lol ;-)। দুর্দান্ত ব্যাখ্যা বিটিডাব্লু, +1
পিটার গুজন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.