-
Dhaka, Bangladesh
এই লেখায় আমরা জানবো CSRF Token কী, এটি কীভাবে কাজ করে এবং কেন এটি প্রতিটি session-based ওয়েব অ্যাপ্লিকেশনে ব্যবহার করা উচিত।
CSRF এর পূর্ণরূপ Cross-Site Request Forgery। এটি এমন একটি নিরাপত্তাজনিত দুর্বলতা, যেখানে একজন ব্যবহারকারী না জেনেই তার authenticated session ব্যবহার করে সার্ভারে অননুমোদিত request পাঠানো হয়।
এ ধরনের আক্রমণে সাধারণত ব্যবহারকারীর পাসওয়ার্ড বা লগইন তথ্য চুরি করার প্রয়োজন হয় না। ব্যবহারকারীর ব্রাউজারে থাকা session cookie-ই আক্রমণকারীর জন্য যথেষ্ট হয়ে ওঠে।
একটি সাধারণ পরিস্থিতি কল্পনা করা যাক। একজন ব্যবহারকারী তার ব্যাংকিং বা অ্যাডমিন প্যানেলে সফলভাবে লগইন করেছেন। এরপর তিনি অন্য একটি অচেনা বা malicious ওয়েবসাইট ভিজিট করলেন। সেই ওয়েবসাইটটি ব্যাকগ্রাউন্ডে একটি request তৈরি করে ব্যবহারকারীর ব্রাউজার থেকেই মূল ওয়েবসাইটে পাঠিয়ে দেয়। যেহেতু ব্যবহারকারী আগে থেকেই লগইন অবস্থায় ছিলেন, সার্ভার সেই request-কে বৈধ মনে করে কার্যক্রম সম্পন্ন করে ফেলে।
এইভাবে ব্যবহারকারীর অজান্তেই টাকা স্থানান্তর, প্রোফাইল পরিবর্তন কিংবা গুরুত্বপূর্ণ ডেটা ডিলিট হয়ে যেতে পারে।
CSRF Token হলো একটি এলোমেলো (random), ইউনিক এবং গোপন মান (secret value), যা সার্ভার প্রতিটি ব্যবহারকারীর session-এর জন্য তৈরি করে। এই token সাধারণত HTML form-এর ভেতরে একটি hidden input হিসেবে যুক্ত করা হয় এবং request-এর সাথে সার্ভারে পাঠানো হয়।
সার্ভার request গ্রহণ করার সময় সেই token যাচাই করে নিশ্চিত হয় যে request-টি আসল ব্যবহারকারী থেকেই এসেছে।
যখন কোনো ব্যবহারকারী একটি form লোড করে, তখন সার্ভার প্রথমে একটি random token তৈরি করে এবং সেটি session-এর মধ্যে সংরক্ষণ করে। একই token form-এর ভেতরে একটি hidden field হিসেবে যুক্ত থাকে। ব্যবহারকারী যখন form submit করে, তখন token-সহ request সার্ভারে পৌঁছায়। সার্ভার এরপর request-এর token এবং session-এ সংরক্ষিত token মিলিয়ে দেখে। যদি দুটো সমান হয়, তাহলে request গ্রহণ করা হয়, অন্যথায় request বাতিল করে দেওয়া হয়।
এই যাচাই প্রক্রিয়ার কারণেই বাইরের কোনো ওয়েবসাইট থেকে forged request পাঠানো সম্ভব হয় না।
Core PHP ব্যবহার করলে ডেভেলপারকে নিজে থেকেই CSRF Token তৈরি ও যাচাই করতে হয়। সাধারণত random_bytes ফাংশন ব্যবহার করে একটি নিরাপদ random string তৈরি করা হয় এবং সেটি session-এর মধ্যে রাখা হয়। এরপর সেই token form-এর hidden input হিসেবে পাঠানো হয়। form submit হওয়ার পর সার্ভার সেই token session-এর token-এর সাথে তুলনা করে। token mismatch হলে request সাথে সাথে reject করা হয়।
এই পুরো প্রক্রিয়াটাই CSRF protection-এর মূল ভিত্তি।
Laravel framework এই কাজটিকে অনেক সহজ করে দিয়েছে। Laravel-এ CSRF protection ডিফল্টভাবে সক্রিয় থাকে এবং প্রতিটি POST, PUT, PATCH বা DELETE request স্বয়ংক্রিয়ভাবে যাচাই করা হয়। ডেভেলপারকে শুধু form-এর মধ্যে @csrf directive ব্যবহার করতে হয়। Laravel-এর middleware নিজে থেকেই token generate, store এবং verify করার দায়িত্ব নেয়।
এ কারণে Laravel অ্যাপ্লিকেশনগুলো ডিফল্টভাবেই CSRF attack থেকে সুরক্ষিত থাকে।
CSRF protection না থাকলে একটি ওয়েব অ্যাপ্লিকেশন গুরুতর ঝুঁকির মুখে পড়ে। আক্রমণকারী ব্যবহারকারীর অজান্তেই বিভিন্ন sensitive action execute করতে পারে। এর ফলে account hijacking, financial loss কিংবা গুরুত্বপূর্ণ তথ্য পরিবর্তন বা মুছে যাওয়ার মতো ঘটনা ঘটতে পারে।
অনেক ডেভেলপার CSRF এবং SSRF একে অপরের সাথে গুলিয়ে ফেলেন, যদিও এগুলো সম্পূর্ণ ভিন্ন ধরনের vulnerability। CSRF মূলত ব্যবহারকারীর ব্রাউজার ও session-এর উপর নির্ভর করে, যেখানে SSRF সার্ভার নিজেই অন্য internal বা external resource-এ request পাঠাতে বাধ্য হয়। CSRF Token দিয়ে CSRF প্রতিরোধ করা গেলেও SSRF প্রতিরোধে input validation ও network-level security প্রয়োজন হয়।
Mobile application বা token-based API সাধারণত browser session বা cookie ব্যবহার করে না। সেখানে request authentication করা হয় JWT বা Bearer token-এর মাধ্যমে। তাই এই ধরনের API-তে অধিকাংশ সময় CSRF protection প্রয়োজন হয় না। তবে যেসব ওয়েব অ্যাপ্লিকেশন session cookie ব্যবহার করে, সেগুলোর ক্ষেত্রে CSRF Token অবশ্যই ব্যবহার করা উচিত।
CSRF Token হলো একটি ছোট কিন্তু অত্যন্ত শক্তিশালী নিরাপত্তা ব্যবস্থা। অল্প পরিশ্রমে এটি বড় ধরনের security attack প্রতিরোধ করতে পারে। যে কোনো session-based ওয়েব অ্যাপ্লিকেশন তৈরি করার সময় CSRF protection ব্যবহার করা একটি অপরিহার্য ভালো অভ্যাস।
একজন দায়িত্বশীল ডেভেলপার হিসেবে নিরাপদ অ্যাপ্লিকেশন তৈরি করাই আমাদের প্রধান লক্ষ্য হওয়া উচিত।
You must login to comment.
How can I help you?
Comments