CSRF এবং CORS: সঠিকভাবে ব্রাউজার রিকোয়েস্ট সুরক্ষিত করুন

Security2026-09-14TryQuickToolBox

আপনি একটি পরিষ্কার API সহ একটি ওয়েব অ্যাপ তৈরি করেছেন, কিন্তু তারপর আপনার লগে অদ্ভুত রিকোয়েস্ট দেখতে পাচ্ছেন—বা আরও খারাপ, একটি নিরাপত্তা স্ক্যানার আপনার সাইটে CSRF এবং CORS ভুল কনফিগারেশনের জন্য পতাকা উত্তোলন করছে। এই দুটি সংক্ষিপ্ত রূপ প্রায়ই একসাথে মিশে যায়, কিন্তু তারা ভিন্ন সমস্যার সমাধান করে। এগুলো ভুল বুঝলে আপনার ব্যবহারকারীরা ঝুঁকিতে পড়তে পারে বা বৈধ ক্রস-অরিজিন রিকোয়েস্ট ভেঙে যেতে পারে।

এই নিবন্ধে, আমরা স্পষ্ট করব CSRF এবং CORS আসলে কী, তারা ব্রাউজার নিরাপত্তার সাথে কীভাবে ইন্টারঅ্যাক্ট করে, এবং কার্যকারিতা না ভেঙে আপনার অ্যাপ্লিকেশন সুরক্ষিত করার জন্য সুনির্দিষ্ট পদক্ষেপ দেব।

CSRF কী এবং কেন আপনার এটি নিয়ে ভাবা উচিত?

ক্রস-সাইট রিকোয়েস্ট ফরজারি (CSRF) একটি আক্রমণ যা ব্যবহারকারীর ব্রাউজারকে প্রতারণা করে এমন একটি সাইটে রিকোয়েস্ট পাঠায় যেখানে তারা প্রমাণিত। কল্পনা করুন আপনি bank.com-এ আপনার ব্যাঙ্কে লগ ইন করেছেন। তারপর আপনি একটি ক্ষতিকারক সাইট পরিদর্শন করেন যাতে একটি ইমেজ ট্যাগ রয়েছে যেমন <img src="https://bank.com/transfer?to=attacker&amount=1000">। আপনার ব্রাউজার স্বয়ংক্রিয়ভাবে আপনার ব্যাঙ্ক কুকিজ রিকোয়েস্টের সাথে অন্তর্ভুক্ত করে, এবং যদি ব্যাঙ্কে CSRF সুরক্ষা না থাকে, তাহলে ট্রান্সফারটি সম্পন্ন হয়।

মূল বিষয়: CSRF একটি সাইটের ব্যবহারকারীর ব্রাউজারের প্রতি আস্থার সুযোগ নেয়। আক্রমণকারীর আপনার সেশন চুরি করার দরকার নেই; তাদের শুধু আপনার ব্রাউজার আপনার পক্ষ থেকে একটি রিকোয়েস্ট করতে হবে।

CSRF আক্রমণ কীভাবে কাজ করে

একটি CSRF আক্রমণ সফল হতে তিনটি শর্ত পূরণ করতে হবে:

সাধারণ লক্ষ্যবস্তু হল অবস্থা-পরিবর্তনকারী অপারেশন: ইমেইল পরিবর্তন, তহবিল স্থানান্তর, কন্টেন্ট পোস্ট করা, বা অনুমতি পরিবর্তন।

CORS কী এবং কেন এটি বিদ্যমান?

ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) একটি ব্রাউজার মেকানিজম যা ওয়েব পেজগুলিকে একটি ভিন্ন ডোমেইনে রিকোয়েস্ট করতে অনুমতি দেয় বা অস্বীকার করে যে পেজটি পরিবেশন করেছে। এটি সম-উৎস নীতি (SOP)-এর একটি এক্সটেনশন, যা সীমাবদ্ধ করে কীভাবে একটি অরিজিন থেকে লোড করা একটি ডকুমেন্ট বা স্ক্রিপ্ট অন্য অরিজিনের রিসোর্সের সাথে ইন্টারঅ্যাক্ট করতে পারে।

CORS ছাড়া, একটি ক্ষতিকারক সাইট জাভাস্ক্রিপ্ট ব্যবহার করে আপনার ব্যাঙ্কের API থেকে ডেটা পড়তে পারে যদি আপনি লগ ইন থাকেন। CORS সার্ভারগুলিকে নির্দিষ্ট ক্রস-অরিজিন রিকোয়েস্ট স্পষ্টভাবে অনুমতি দেওয়ার একটি উপায় দেয়।

সম-উৎস নীতি (SOP)

দুটি URL-এর একই অরিজিন থাকে যদি প্রোটোকল, হোস্ট এবং পোর্ট অভিন্ন হয়। উদাহরণস্বরূপ, https://example.com/app এবং https://example.com/api একই অরিজিন শেয়ার করে, কিন্তু http://example.com (ভিন্ন প্রোটোকল) এবং https://api.example.com (ভিন্ন হোস্ট) করে না।

SOP একটি অরিজিনের স্ক্রিপ্টগুলিকে অন্য অরিজিন থেকে প্রতিক্রিয়া পড়তে বাধা দেয়। CORS HTTP হেডার যোগ করে এটি শিথিল করে যা ব্রাউজারকে বলে রিকোয়েস্টটি অনুমতি দেবে কিনা।

CSRF বনাম CORS: মূল পার্থক্য

এটি বোঝা অত্যন্ত গুরুত্বপূর্ণ যে CSRF এবং CORS বিপরীত নয়; তারা বিভিন্ন নিরাপত্তা উদ্বেগ সম্বোধন করে। CSRF হল অননুমোদিত অবস্থা-পরিবর্তনকারী রিকোয়েস্ট প্রতিরোধ করা, যখন CORS হল কোন অরিজিনগুলি প্রতিক্রিয়া পড়তে পারে তা নিয়ন্ত্রণ করা।

দিক CSRF CORS
প্রাথমিক লক্ষ্য জাল রিকোয়েস্ট প্রতিরোধ ক্রস-অরিজিন পড়া নিয়ন্ত্রণ
আক্রমণ ভেক্টর ক্ষতিকারক সাইট রিকোয়েস্ট ট্রিগার করে ক্ষতিকারক সাইট প্রতিক্রিয়া পড়ে
প্রতিরক্ষা ব্যবস্থা টোকেন, SameSite কুকিজ HTTP হেডার (Access-Control-*)
ব্রাউজার প্রয়োগ কোনোটিই না (সার্ভারকে যাচাই করতে হবে) হ্যাঁ (ব্রাউজার পড়া ব্লক করে)

CSRF থেকে কীভাবে রক্ষা করবেন

CSRF প্রশমিত করার জন্য বেশ কয়েকটি প্রমাণিত কৌশল রয়েছে। আপনার সেগুলোর সবগুলোর প্রয়োজন নেই, তবে প্রতিরক্ষা স্তরীভূত করা বুদ্ধিমানের কাজ।

১. অ্যান্টি-CSRF টোকেন ব্যবহার করুন

সবচেয়ে শক্তিশালী প্রতিরক্ষা হল প্রতিটি অবস্থা-পরিবর্তনকারী রিকোয়েস্টে একটি অনন্য, অনুমানযোগ্য টোকেন অন্তর্ভুক্ত করা। সার্ভার প্রক্রিয়াকরণের আগে টোকেনটি যাচাই করে। টোকেনগুলি ব্যবহারকারীর সেশনের সাথে আবদ্ধ হওয়া উচিত এবং URL-এ প্রকাশ করা উচিত নয় (রেফারার হেডারের মাধ্যমে ফাঁস এড়াতে)।

// উদাহরণ: Node.js/Express-এ CSRF টোকেন তৈরি এবং যাচাই
const csrf = require('csurf');
const csrfProtection = csrf({ cookie: true });

app.get('/form', csrfProtection, (req, res) => {
  res.render('form', { csrfToken: req.csrfToken() });
});

app.post('/process', csrfProtection, (req, res) => {
  // টোকেন স্বয়ংক্রিয়ভাবে যাচাই করা হয়
  res.send('OK');
});

২. SameSite কুকিজ সেট করুন

আধুনিক ব্রাউজারগুলি কুকিজের জন্য SameSite অ্যাট্রিবিউট সমর্থন করে। এটি Lax বা Strict এ সেট করলে ব্রাউজার ক্রস-সাইট রিকোয়েস্টে কুকিজ পাঠানো থেকে বিরত থাকে, যা অনেক CSRF আক্রমণ ব্লক করে। Lax শীর্ষ-স্তরের নেভিগেশনে (যেমন, একটি লিঙ্ক ক্লিক করা) কুকিজ অনুমতি দেয়, যখন Strict সমস্ত ক্রস-সাইট রিকোয়েস্ট ব্লক করে।

Set-Cookie: sessionId=abc123; SameSite=Lax; Secure; HttpOnly

৩. Origin এবং Referer হেডার যাচাই করুন

আগত রিকোয়েস্টে Origin বা Referer হেডার পরীক্ষা করুন। যদি তারা আপনার প্রত্যাশিত ডোমেইনের সাথে মেলে না, তাহলে রিকোয়েস্ট প্রত্যাখ্যান করুন। এটি একটি সহজ কিন্তু কার্যকর অতিরিক্ত স্তর।

৪. AJAX-এর জন্য কাস্টম হেডার ব্যবহার করুন

যদি আপনার API জাভাস্ক্রিপ্টের মাধ্যমে ব্যবহৃত হয়, তাহলে X-Requested-With-এর মতো একটি কাস্টম হেডার প্রয়োজন। ব্রাউজারগুলি কাস্টম হেডারের জন্য CORS প্রিফ্লাইট প্রয়োগ করে, তাই একটি ক্ষতিকারক সাইট থেকে একটি সাধারণ ফর্ম POST এটি অন্তর্ভুক্ত করবে না।

CORS সঠিকভাবে কনফিগার করা

CORS ভুল কনফিগারেশনও নিরাপত্তা সমস্যা সৃষ্টি করতে পারে। সবচেয়ে সাধারণ ভুল হল Access-Control-Allow-Origin: * সেট করা যখন ক্রেডেনশিয়ালও অনুমতি দেওয়া হয়। এই সমন্বয়টি ব্রাউজার দ্বারা নিষিদ্ধ, কিন্তু ডেভেলপাররা কখনও কখনও এটি অনিরাপদভাবে কাজ করার চেষ্টা করে।

CORS হেডারের জন্য সেরা অনুশীলন

# উদাহরণ: CORS-এর জন্য Nginx কনফিগারেশন
location /api/ {
  if ($http_origin ~* (https://(app|admin)\.example\.com)) {
    add_header 'Access-Control-Allow-Origin' $http_origin;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
  }
  if ($request_method = 'OPTIONS') {
    return 204;
  }
}

মনে রাখবেন যে CORS ব্রাউজার দ্বারা প্রয়োগ করা হয়, সার্ভার দ্বারা নয়। এটি প্রমাণীকরণ বা অনুমোদনের বিকল্প নয়; এটি সম-অরিজিন নীতি নিরাপদে শিথিল করার একটি উপায়।

সবকিছু একসাথে রাখা

ব্রাউজার রিকোয়েস্ট সুরক্ষিত করতে একটি স্তরীভূত পদ্ধতির প্রয়োজন। এখানে একটি দ্রুত চেকলিস্ট:

  1. সমস্ত অবস্থা-পরিবর্তনকারী অপারেশনের জন্য অ্যান্টি-CSRF টোকেন ব্যবহার করুন।
  2. SameSite কুকিজ সেট করুন Lax বা Strict এ।
  3. সার্ভারে Origin/Referer হেডার যাচাই করুন।
  4. CORS সুনির্দিষ্টভাবে কনফিগার করুন: অরিজিন হোয়াইটলিস্ট করুন, পদ্ধতি সীমাবদ্ধ করুন, এবং ক্রেডেনশিয়াল সহ ওয়াইল্ডকার্ড এড়িয়ে চলুন।
  5. নিরাপত্তা স্ক্যানার এবং ম্যানুয়াল চেক দিয়ে আপনার অ্যাপ নিয়মিত পরীক্ষা করুন।

CSRF এবং CORS-এর স্বতন্ত্র ভূমিকা বুঝে, আপনি সাধারণ pitfalls এড়াতে পারেন এবং একটি আরও সুরক্ষিত ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন।

সচরাচর জিজ্ঞাসা

CORS কি CSRF আক্রমণ প্রতিরোধ করতে পারে?

না, CORS CSRF প্রতিরোধ করে না। CSRF আক্রমণ প্রতিক্রিয়া পড়ার উপর নির্ভর করে না; তারা কেবল রিকোয়েস্ট ট্রিগার করে। CORS নিয়ন্ত্রণ করে কোন অরিজিনগুলি প্রতিক্রিয়া পড়তে পারে, কিন্তু এটি রিকোয়েস্ট পাঠানো থেকে ব্লক করে না। CSRF প্রতিরোধ করতে, আপনার টোকেন, SameSite কুকিজ, বা অরিজিন যাচাইকরণ প্রয়োজন।

Access-Control-Allow-Origin '*' সেট করা কি নিরাপদ?

এটি '*' এ সেট করা নিরাপদ শুধুমাত্র যদি আপনার API ক্রেডেনশিয়াল (কুকিজ, HTTP প্রমাণীকরণ) ব্যবহার না করে। যদি ক্রেডেনশিয়াল জড়িত থাকে, ব্রাউজারগুলি প্রতিক্রিয়া প্রত্যাখ্যান করবে। প্রমাণিত API-এর জন্য, সর্বদা সঠিক অরিজিন নির্দিষ্ট করুন।

Authorization হেডারে JWT ব্যবহার করলে আমার CSRF সুরক্ষা প্রয়োজন কি?

যদি আপনি কুকিজে JWT সংরক্ষণ করেন, তাহলে আপনার এখনও CSRF সুরক্ষা প্রয়োজন কারণ কুকিজ স্বয়ংক্রিয়ভাবে পাঠানো হয়। যদি আপনি মেমরিতে JWT সংরক্ষণ করেন এবং Authorization হেডারের মাধ্যমে পাঠান, তাহলে CSRF একটি উদ্বেগ নয় কারণ আক্রমণকারী ক্রস-অরিজিনে কাস্টম হেডার সেট করতে পারে না। তবে, টোকেন সুরক্ষিত রাখতে আপনাকে XSS থেকে রক্ষা করতে হবে।

আপনার API-এর CORS হেডার পরীক্ষা করতে প্রস্তুত? রিকোয়েস্ট প্যাটার্ন পরিদর্শন করতে এবং সন্দেহজনক ক্রস-অরিজিন প্রচেষ্টা সনাক্ত করতে আমাদের Nginx Log Analyzer ব্যবহার করুন।