ম্যাজেন্টো 2 - ফর্মকি ব্যবহার কী?


12

আমি লগইন ফর্মের ভিতরে কোডের এই লাইনটি দেখছি। <?php echo $block->getBlockHtml('formkey'); ?>

  • এর ব্যবহার কী?
  • এটা কি আরও সুরক্ষিত?
  • এটি কি ফর্ম পোস্টের জন্য আবশ্যক?

উত্তর:


23

ম্যাজেন্টোতে ফর্ম কীগুলি ক্রস সাইট রিকোয়েস্ট জালিয়াতির বিরুদ্ধে প্রতিরোধের একটি মাধ্যম , সংক্ষেপে, এটি আপনাকে যেমন পোস্ট করা অন্য সাইটগুলি থেকে আপনার ফর্মগুলিতে (কার্টে যুক্ত হওয়ার মতো) আপনার পোস্ট করার চেষ্টা করা লোকদের থেকে আপনাকে নিরাপদ রাখা।

এটি বিপজ্জনক হতে পারে কারণ কেউ তাত্ত্বিকভাবে তাদের নিজস্ব ফর্ম তৈরি করতে পারে এবং আপনার স্টোরের কোনও ফর্ম হ্যান্ডলার নিয়ামক ক্রিয়াকে পোস্ট করতে পারে। সিএসআরএফ সুরক্ষা মূলত যে কোনও পোস্টকে উপেক্ষা করে যা ফর্ম পোস্টের সাথে অন্তর্ভুক্ত ফর্ম_কি পরামিতিগুলির চেক ব্যর্থ করে।

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

এটি ম্যাজেন্টোকে "ফর্মকি" নাম সহ একটি লেআউট ব্লক সন্ধান করতে এবং এটি আউটপুট করতে বলে। ম্যাজেন্টোতে এটি সাধারণত কিছু ফাইল থাকে যা এতে থাকে:

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

এটি ম্যাজেন্টোকে ব্যবহারকারীর সেশনের জন্য একটি অনন্য ফর্ম কী আউটপুট এবং সঞ্চয় করতে নির্দেশ দেয়। সমস্ত সিএসআরএফ-সুরক্ষিত ম্যাজেন্টো নিয়ন্ত্রক ক্রিয়াকলাপ কোনও মূল্যবোধ করার আগে এর বিরুদ্ধে যাচাই করবে।


1
`<? পিএইচপি ইকো ম্যাজ :: getSingleton ('কোর / সেশন') -> getFormKey ()?> এটি কী ফর্ম কী তৈরি করবে? আমাকে কেবল একটি ফর্মের ফর্মকি প্রতিধ্বনিত করা দরকার এবং ম্যাজেন্টো সমস্ত চেকিং যত্ন নেবে?
পল

হ্যাঁ ম্যাজেন্টো যত্ন নেবে
অর্জুন

ফর্ম কীটি মিলছে না তখন কী সম্ভব? যখন গ্রাহক সেশনটির মেয়াদ শেষ হয় বা কিছু? অবশ্যই আমার অর্থ পরিস্থিতি পৃথকীকরণের ক্রস সাইটের অনুরোধ জালিয়াতি।
বার্টোসজ কুবিকি

1
@ অর্জুন উপরের একটি মন্তব্যে লিখেছেন যে ম্যাজেন্টো ফর্মকে চেক করার জন্য যত্ন নেবে। এটি কেবল অন্তর্নির্মিত নিয়ন্ত্রণকারীদের ক্ষেত্রেই সত্য। আপনি যদি নিজের কন্ট্রোলার তৈরি করে থাকেন বা যদি এটি কোনও তৃতীয় পক্ষের নিয়ামক যা ফর্ম কীটি প্রত্যাশা করে না, তবে এটি সত্য নয়। এই ক্ষেত্রে আপনাকে এটি ব্যবহার করে নিজেই পরীক্ষা করা দরকার \Magento\Framework\Data\Form\FormKey\Validator
স্কট বুচানান

4
@ অর্জুন এই উত্তরটি বিভ্রান্তিকর। ট্যাগটি ম্যাজেন্টো 2-কে বোঝায় তবুও আপনি ম্যাজেন্টো 1
দ্য সিকার

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();?>">

আপনি যদি পিএইচটিএমএল ফাইলটিতে ফর্ম কী যুক্ত করতে চান তবে সরাসরি ব্যবহার করুন

$ 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();
}

দ্রষ্টব্য: পিএইচটিএমএল ফাইলগুলিতে সরাসরি অবজেক্ট ম্যানেজার ব্যবহার করবেন না


1
চমৎকার সমাধান ..
রাকেশ জেসাদিয়া

2
ObjectManagerঅগ্রভাগে ব্যবহারের পরামর্শ দেওয়া বন্ধ করুন এটি একটি ভাল অনুশীলন নয়।
ভ্লাদ পাত্রু

1
@ প্রিন্সপ্যাটেল আপনি এমনভাবে একটি অস্বীকৃতি ঘোষণা করলেন, একজন নতুন বিকাশকারী এটি জানেন না এবং পিটিএইচটিএমএল সেট করবেন এবং প্রশ্নের কোড নমুনা থেকে মনে হচ্ছে এটি পিএইচটিএমএলে ব্যবহার করা দরকার
ভ্লাদ প্যাট্রু

1
কখনও অবজেক্টম্যানেজার ব্যবহার করবেন না!
দান ভ্যান ডেন বার্গ

1
@ জাফরপিনজার হ্যাঁ এটি একটি কোডিং মান এবং এটি নির্ভরতা ইনজেকশনটির উদ্দেশ্যকে পরাস্ত করে আরও তথ্যের জন্য এই থ্রেডটি পরীক্ষা করুন: magento.stackexchange.com/questions/117098/…
প্রিন্স প্যাটেল

-1

অবজেক্ট ম্যানেজার এবং সমস্তটি আরম্ভ করার দরকার নেই, আপনি ব্যবহার করতে পারেন।

window.FORM_KEY

সামনের অংশ আপনি ব্যবহার করতে পারেন:

$block->getKey()

আশাকরি এটা সাহায্য করবে!

ধন্যবাদ


2
এটি কেবল ব্যাকএন্ডে উপলভ্য
অ্যালেক্স ডিনকা

এটি সম্পর্কে নিশ্চিত নয়, তবে আমি উত্তর-সামনের জন্যও আপডেট করেছি।
কপিল যাদব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.