CSRF (Cross-Site Request Forgery) একটি নিরাপত্তা দুর্বলতা, যা এক ধরনের আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর পক্ষ থেকে অনিচ্ছাকৃতভাবে একটি অনুরোধ পাঠায়। এটি মূলত ব্যবহারকারী যখন একটি ওয়েবসাইটে লগ ইন থাকে এবং আক্রমণকারী কোনো ভুয়া অনুরোধ পাঠায়, তখন ওই ওয়েবসাইটটি ওই ব্যবহারকারীর পক্ষ থেকে অনুরোধটি গ্রহণ করতে পারে। এই ধরনের আক্রমণ প্রতিরোধের জন্য CSRF সুরক্ষা প্রয়োজন।
Symfony স্বয়ংক্রিয়ভাবে CSRF সুরক্ষা প্রদান করে এবং এটি ফর্মের মাধ্যমে ওয়েব অ্যাপ্লিকেশনগুলিতে সহজেই প্রয়োগ করা যায়। Symfony-এর CSRF সুরক্ষা ফিচার ব্যবহার করে, আপনি সাইটের ফর্মগুলি সুরক্ষিত রাখতে পারবেন এবং ব্যবহারকারীর অনুজ্ঞা ছাড়া তাদের নাম্বার পরিবর্তন বা ডিলিট করতে পারবেন না।
CSRF কীভাবে কাজ করে?
CSRF আক্রমণ থেকে রক্ষা পেতে, Symfony ফর্ম সাবমিশনের সময় একটি CSRF টোকেন ব্যবহার করে। CSRF টোকেন হল একটি একক ব্যবহারের সিকিউরিটি কী যা ফর্মে অটোমেটিকভাবে অন্তর্ভুক্ত করা হয়। যখন ফর্মটি সাবমিট হয়, তখন Symfony এই টোকেনটি যাচাই করে নিশ্চিত করে যে, এটি বৈধ উৎস থেকে এসেছে।
Symfony-তে CSRF সুরক্ষা প্রক্রিয়া
Symfony ফর্মগুলি তৈরি করার সময় CSRF সুরক্ষা স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়। তবে, আপনি যদি কোনো কাস্টম ফর্ম তৈরি করেন, তবে আপনাকে ম্যানুয়ালি CSRF সুরক্ষা সক্রিয় করতে হবে।
১. Symfony ফর্মে CSRF সুরক্ষা সক্রিয় করা
Symfony-এর FormBuilder ক্লাসে csrf_protection বিকল্পটি true করে CSRF সুরক্ষা সক্রিয় করা হয়।
উদাহরণ:
// src/Form/Type/ProductType.php
namespace App\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Validator\Constraints\NotBlank;
class ProductType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'constraints' => [new NotBlank()],
])
->add('save', SubmitType::class)
->setMethod('POST')
->setAction('/submit-product')
->setCsrfProtection(true); // CSRF সুরক্ষা সক্রিয় করা
}
}
setCsrfProtection(true): এই লাইনটি CSRF সুরক্ষা সক্রিয় করে।
২. CSRF টোকেন ইনক্লুড করা ফর্মে
ফর্ম তৈরি করার সময়, Symfony স্বয়ংক্রিয়ভাবে CSRF টোকেন ফর্মে ইনক্লুড করে, তবে এটি আপনার কাস্টম ফর্মে যদি প্রয়োজনে ম্যানুয়ালি করা প্রয়োজন হয়, তাহলে নিচের মত করতে হবে:
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('csrf_token', HiddenType::class, [
'data' => $this->csrfTokenManager->getToken('product_form')->getValue(),
]);
}
এইভাবে আপনি CSRF টোকেন ফর্মে ম্যানুয়ালি যোগ করতে পারবেন।
৩. CSRF টোকেন যাচাই করা
ফর্ম সাবমিট করার সময়, Symfony স্বয়ংক্রিয়ভাবে CSRF টোকেন যাচাই করে। যদি টোকেন বৈধ না হয়, তবে এটি একটি 403 Forbidden ত্রুটি দেখাবে। ফর্ম সাবমিশনের সময় এটি একটি নিরাপত্তা বৈশিষ্ট্য হিসেবে কাজ করে।
উদাহরণ (Controller-এ ফর্ম প্রসেসিং):
// src/Controller/ProductController.php
namespace App\Controller;
use App\Form\ProductType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ProductController extends AbstractController
{
public function submitProduct(Request $request)
{
$form = $this->createForm(ProductType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// ফর্মের ডেটা প্রক্রিয়া করা
$this->addFlash('success', 'Product saved!');
return $this->redirectToRoute('product_list');
}
return $this->render('product/submit.html.twig', [
'form' => $form->createView(),
]);
}
}
এখানে:
handleRequest()ফর্মের ডেটা এবং CSRF টোকেন যাচাই করে।- যদি CSRF টোকেন বৈধ না হয়, তবে Symfony অটোমেটিক্যালি একটি 403 ত্রুটি মেসেজ দেখাবে।
৪. CSRF টোকেন ফর্মে Twig দিয়ে ব্যবহার
Symfony Twig টেমপ্লেটে ফর্মের CSRF টোকেন অটোমেটিক্যালি ইনক্লুড করে, তবে আপনি যদি কাস্টম ফর্ম টেমপ্লেট ব্যবহার করেন, তবে ম্যানুয়ালি CSRF টোকেন ইন্টিগ্রেট করতে পারেন:
{{ form_start(form) }}
{{ form_row(form.name) }}
{{ form_row(form.save) }}
{{ form_end(form) }}
Symfony CSRF টোকেন স্বয়ংক্রিয়ভাবে ফর্মের মধ্যে অন্তর্ভুক্ত করে, তাই ম্যানুয়ালি সেটি ইনক্লুড করার দরকার নেই।
৫. CSRF সুরক্ষা কনফিগারেশন
Symfony ফর্ম সুরক্ষা কনফিগারেশনটি config/packages/security.yaml ফাইলে করা হয়। CSRF সুরক্ষা সক্রিয় রাখতে, আপনি নিম্নলিখিত কনফিগারেশন ব্যবহার করতে পারেন:
framework:
csrf_protection: true
এটি সিস্টেমের জন্য CSRF সুরক্ষা সক্ষম করবে।
সারাংশ
Symfony-তে CSRF সুরক্ষা একটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য যা ফর্মের মাধ্যমে অপ্রত্যাশিত অনুরোধ এড়াতে সাহায্য করে। Symfony স্বয়ংক্রিয়ভাবে CSRF সুরক্ষা সক্রিয় করে এবং ফর্মের সাথে CSRF টোকেন যোগ করে। আপনি যদি কাস্টম ফর্ম তৈরি করেন, তবে CSRF টোকেন ইনজেকশন এবং যাচাই সঠিকভাবে করতে হবে। CSRF সুরক্ষা সক্রিয় রাখলে, আপনার অ্যাপ্লিকেশনটি নিরাপদ থাকবে এবং এটি CSRF আক্রমণ থেকে রক্ষা পাবে।
Read more