wp_verify_nonce बनाम check_admin_referer


21

क्या अंतर है, जो मुझे उपयोग करना चाहिए?

मुझे पता है कि wp_verify_nonce समय सीमा की जाँच करता है, और check_admin_referer मुझे लगता है कि wp_verify_nonce कॉल के साथ-साथ एक व्यवस्थापक url खंड की जाँच कर रहा है, लेकिन मैं थोड़ा उलझन में हूँ कि मैं किस पर और कब उपयोग कर सकता हूँ।

स्पष्टता के लिए धन्यवाद।


1
इस प्रश्न के लिए Tumbleweed बैज? वास्तव में? किसी को?
जेफ

जवाबों:


29

मैंने सोचा कि check_admin_refererनॉन की जाँच की (यह कॉल करता है wp_verify_nonce, और रेफ़रल का उल्लेख करता है । कोर कोड में खुदाई करने के बाद मैंने महसूस किया कि उसने ऐसा नहीं किया। यह सोचते हुए कि यह एक बग था, जिसकी मैंने रिपोर्ट की थी, और रयान बोरेन ने निम्नलिखित के साथ उत्तर दिया:

वास्तव में, यदि गैर-वैध है तो रेफ़र की जाँच नहीं की जानी चाहिए। रेफ़रर्स की अविश्वसनीयता एक कारण है कि नॉन का उपयोग किया जाता है। गैर-संदर्भ पूरी तरह से रेफ़रल जाँच की जगह लेते हैं। केवल एक बार जब हम रेफ़रर की जांच करते हैं तो -1 बैकवर्ड कम्पेटिबिलिटी कंडीशन को हैंडल करते हैं। -1 का मतलब है कि कोई व्यक्ति नॉन का उपयोग नहीं कर रहा है इसलिए हम रेफरल चेकिंग के लिए वापस आते हैं। यह उपयोग अब बहुत दुर्लभ है। check_admin_referer () अब बुरी तरह से नाम दिया गया है कि यह लगभग कभी भी रेफरल जाँच नहीं करता है। बेहतर होगा कि इसे check_nonce () जैसी किसी चीज़ का नाम दिया जाए, लेकिन हम इसे वैसे ही रखते हैं जैसे कि कंपटीटर और पुराने समय के लिए।

इसलिए वास्तव में कोई अंतर नहीं है।


अच्छा काम खुदाई, धन्यवाद, कि कुछ स्पष्टता लाता है।
जेफ

5
वास्तव में एक बड़ा अंतर है जो उपयोग को प्रभावित करता है ... check_admin_referer संपूर्ण स्क्रिप्ट को मरने के साथ मारता है () यदि गैर-वैध नहीं है, जबकि wp_verify_nonce गलत रिटर्न देता है। इसलिए यदि कुछ सामान्य परिस्थितियां हैं जिनमें गैर-विफल हो जाएगा, तो wp_verify_nonce का उपयोग करें ताकि बाकी स्क्रिप्ट अभी भी निष्पादित हो।
सातवें रात्रि

@SeventhSteel - आप बिल्कुल सही हैं। प्रश्न की मेरी व्याख्या यह थी कि जब गैरकानूनी होता है, तो इसकी जाँच करने के तर्क की तुलना इसकी तुलना में की जा रही है
स्टीफन हैरिस

3

नहीं!!!

पर भरोसा मत करो check_admin_referer, सावधान रहो!

  • यह wp_verify_noneकेवल उस स्थिति में शामिल है जब _wpnonceसेट किया गया था !!!
  • उस मामले में, यह नहीं है DIE()। इसके बजाय, यह गलत है ...

इस छद्म कोड के माध्यम से देखें ( पूर्ण स्रोत यहां है ):

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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.