Magento 2 - फॉर्मकी का उपयोग क्या है


12

मुझे लॉगिन फॉर्म के अंदर कोड की यह लाइन दिखाई देती है। <?php echo $block->getBlockHtml('formkey'); ?>

  • इसका क्या उपयोग है?
  • क्या यह अधिक सुरक्षित है?
  • क्या यह फॉर्म पोस्ट के लिए जरूरी है?

जवाबों:


23

Magento में फॉर्म की चाबियां क्रॉस साइट रिक्वेस्ट फॉरगेरी के खिलाफ रोकने का एक साधन हैं , संक्षेप में, यह आपको उन लोगों से सुरक्षित रखने के लिए है जो आपके रूप में प्रस्तुत अन्य साइटों से आपके फ़ॉर्म (जैसे कार्ट में जोड़ें) को पोस्ट करने की कोशिश कर रहे हैं।

यह खतरनाक हो सकता है क्योंकि कोई व्यक्ति सैद्धांतिक रूप से आपके स्टोर में किसी भी रूप हैंडलर नियंत्रक कार्रवाई के लिए अपना स्वयं का फॉर्म और पोस्ट बना सकता है। CSRF सुरक्षा अनिवार्य रूप से किसी भी पोस्ट को नजरअंदाज करती है जो फॉर्म पोस्ट के साथ शामिल form_key पैरामीटर पर एक जांच को विफल करती है।

<?php echo $this->getBlockHtml('formkey')?>

यह मैगेंटो को "फॉर्मकी" नाम के साथ एक लेआउट ब्लॉक की तलाश करने और इसे आउटपुट करने के लिए कहता है। Magento में यह आमतौर पर कुछ फ़ाइल है जिसमें यह है:

<div><input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" /></div>

यह मैगेंटो को उपयोगकर्ता सत्र के लिए एक अद्वितीय फॉर्म कुंजी को आउटपुट और स्टोर करने का निर्देश देता है। सभी सीएसआरएफ-संरक्षित मैगनेटो नियंत्रक क्रियाएं मूल्य का कुछ भी करने से पहले इसके खिलाफ सत्यापित करेंगी।


1
`<? php इको मैज :: getSingleton ('कोर / सेशन') -> getFormKey ()?> यह ऑटो फॉर्म की कुंजी उत्पन्न करेगा? मुझे बस फॉर्म में एको को गूंजने की ज़रूरत है और मैगेंटो सभी जाँच का ध्यान रखेगा?
पॉल

हाँ मैगनेटो ध्यान रखेगा
अर्जुन

क्या संभव है जब फार्म कुंजी मेल नहीं खाती है? जब ग्राहक सत्र समाप्त होता है या कुछ और? निश्चित रूप से मेरा मतलब है कि क्रॉस साइट अनुरोध जालसाजी के अलावा स्थिति।
बार्टोज़ कुबिकी

1
@ अर्जुन ने ऊपर एक टिप्पणी में लिखा है कि मैगेंटो फॉर्मे की जांच का ध्यान रखेंगे। यह केवल अंतर्निहित नियंत्रकों के लिए सही है। यदि आप अपना स्वयं का नियंत्रक बना रहे हैं, या यदि यह तृतीय-पक्ष नियंत्रक है जो प्रपत्र कुंजी की अपेक्षा नहीं करता है, तो यह सच नहीं है। इन मामलों में आपको इसका उपयोग करके खुद को जांचना होगा \Magento\Framework\Data\Form\FormKey\Validator
स्कॉट बुकानन

4
@ अर्जुन यह उत्तर भ्रामक है। टैग
मैगेंटो

21

आप इस कोड के द्वारा formkey जोड़ सकते हैं:

<?php 
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
$FormKey = $objectManager->get('Magento\Framework\Data\Form\FormKey'); 
?>
//Hidden form key field after <form> tag
<input name="form_key" type="hidden" value="<?php echo $FormKey->getFormKey();?>">

अगर आप phtml फाइल में फॉर्म की को जोड़ना चाहते हैं तो डायरेक्ट का उपयोग करें

$ This-> getFormKey ()

<input name="form_key" type="hidden" value="<?php echo $block->getFormKey();?>">

अपनी कक्षा के निर्माणकर्ता में निर्भरता इंजेक्शन का उपयोग करना:

protected $formKey;

public function __construct(
    \Magento\Framework\Data\Form\FormKey $formKey
) {
    $this->formKey = $formKey;
}

public function getFormKey()
{
     return $this->formKey->getFormKey();
}

नोट: phtml फ़ाइलों में सीधे ऑब्जेक्ट मैनेजर का उपयोग न करें


1
अच्छा समाधान ..
राकेश जेसादिया

2
ObjectManagerदृश्यपटल में उपयोग का सुझाव देना बंद करें यह एक अच्छा अभ्यास नहीं है।
व्लाद पैट्रू

1
@PrincePatel आप ऐसा कहते हैं कि एक अस्वीकरण किया गया था, एक नए डेवलपर को यह नहीं पता होगा और यह phtml में सेट होगा और प्रश्न में कोड नमूने से ऐसा लगता है कि इसे phtml में उपयोग करने की आवश्यकता है
Vlad Patru

1
कभी ObjectManager का उपयोग न करें!
दान वैन डेन बर्ग

1
@jafarpinjar हाँ यह एक कोडिंग मानक है और यह निर्भरता इंजेक्शन के उद्देश्य को पराजित करता है। अधिक जानकारी के लिए इस धागे की जाँच करें: magento.stackexchange.com/questions/117098/…
प्रिंस पटेल

-1

ऑब्जेक्ट मैनेजर और सभी को इनिशियलाइज़ करने की कोई आवश्यकता नहीं है, आप उपयोग कर सकते हैं।

window.FORM_KEY

आप उपयोग कर सकते हैं:

$block->getKey()

उम्मीद है की यह मदद करेगा!

धन्यवाद


2
यह केवल बैकएंड में उपलब्ध है
एलेक्स डिनका

इसके बारे में निश्चित नहीं है, लेकिन मैंने फ्रंट-एंड के जवाब को भी अपडेट कर दिया है।
कपिल यादव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.