CSRF Token কি এবং কেন ব্যবহার করা হয়!?

CSRF বা Cross-Site Request Forgery হল এক ওয়েবসাইট থেকে আরেক ওয়েবসাইটে আপনার ব্রাউজারের মাধমে রিকুয়েস্ট সেন্ড করা! কঠিন হয়ে গেল? আচ্ছা সহজ করি…

১) ধরুন কোন ওয়েব ব্রাউজার দিয়ে আপনি ফেসবুকে লগিন করেছেন। সেখানে স্ট্যাটাস পোস্ট করার জন্য একটা ফর্ম আছে। আপনি সেখানে কিছু লিখে সাবমিট করলেই সেটা পাবলিশ হয়ে যায়!

২) আচ্ছা, আপনি কি প্রতিবারই পোস্ট করার সময় ইউজার নেম এবং পাসওয়ার্ড দিয়ে পোস্ট করেন? না। তাহলে ফেসবুক কিভাবে বুঝে যে এই ফর্মটা আপনিই সাবমিট করেছেন? সিম্পল ব্যপার, সেই ব্রাউজার দিয়ে তো আপনি ফেসবুকে লগিন করেছিলেন, তাই ফেসবুক এটা ধরে নিয়েছে যে আপনার এই ব্রাউজার থেকে আসা রিকুয়েস্ট গুলো আপনিই করছেন!

৩) আপনি কি জানেন যে জাভাস্ক্রিপ্ট নামে একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ রয়েছে যা প্রায় সকল ওয়েবসাইটেই থাকে এবং সেটা দিয়ে যেকোন ধরনের ফর্ম নিমেষেই তৈরি করে ফেলা যায় এবং যেখানে সেখানে তা সাবমিট করা যায়? ধরে নিলাম যে আপনি জানেন না!!

৪) কোন এক কারনে আপনি এমন একটি ওয়েবসাইটে গেলেন যেটাতে এমন একটি জাভাস্ক্রিপ্ট কোড রয়েছে যা হুবুহু ফেসবুক স্ট্যাটাস ফর্মের মত একটা ফর্ম তৈরি করে সেটাতে যেকোন কিছু লিখে সরাসরি ফেসবুকের ওয়েবসাইটেই সাবমিট করে দিল!!! অথচ আপনি জানতেই পারলেন না! (এটা সম্ভব কিন্তু! )

৫) ফেসবুক যখন সেই জাভাস্ক্রিপ্ট থেকে অটো জেনারেট হওয়া রিকুয়েস্ট টা পাবে সে কিন্তু ধরে নিবে যে রিকুয়েস্টটা আপনি করেছেন! ( কেন? কারন সেটা আপনার ব্রাউজার থেকে গিয়েছে এবং এই ব্রাউজার দিয়েই আপনি ফেসবুকে লগিন করে বসে আছেন!)

৬) অন্য একটা ওয়েবসাইট থেকে একটা জাভাস্ক্রিপ্ট কোড উলটা পালটা কিছু লিখে আপনার ফেসবুকে পাবলিশ করে দিল, এই বিষয়টা যদি আপনার মাথা ব্যথার কোন কারন না হয় তাহলে আপনি আসলেই খুব শান্তিতে আছেন! ( তবে সেই ভয়ংকর কোডটা যে শুধু আপনার ফেসবুকেই রিকুয়েস্ট সাবমিট করতে পারবে এমন নয়, ইকমার্স, ব্যাংক বা ফিন্যানশিয়াল অথবা পারসোনাল যেকোন ওয়েবসাইটেই কিন্তু সে এরকম রিকুয়েস্ট পাঠাতে পারবে!!)

৭) CSRF এটাকেই বলে। এক ওয়েবসাইট থেকে আরেক ওয়েবসাইটে আপনার ব্রাউজারের মাধ্যমে রিকুয়েস্ট করা। (এবং অবশ্যই আপনার অজান্তে)

৮) CSRF টোকেন হল এই ধরনের ক্রস সাইট রিকুয়েস্ট থেকে বাচার সিস্টেম! এটা জাস্ট একটা র‍্যান্ডম কিছু অক্ষরের স্ট্রিং। যা অটো জেনারেট হয় এবং ভেরিফাই হয়। আবারো কঠিন লাগছে!?

৯) ধরুন ফেসবুক বুদ্ধি করে তার প্রতিটা ফর্মের সাথে গোপনে একটা র‍্যান্ডম স্ট্রিং আপনার ব্রাউজারে পাঠিয়ে দিল, যখন আপনি ফর্ম সাবমিট করবেন তখন সেই স্ট্রিং টাও আবার ফেসবুকের সার্ভারে যাবে। ফেসবুক তখন ভেরিফাই করে দেখবে যে সে যে স্ট্রিং টা ব্রাউজারে পাঠিয়েছিল সেটাই কি সাবমিটের সময় আবার সার্ভারে ফিরে গেছে কিনা! যদি ফিরে যায় তাহলে রিকুয়েস্ট এক্সেপ্ট করবে অন্যথায় করবেনা!

১০) অন্য কোন ওয়েবসাইটের জাভাস্ক্রিপ্ট কোড ফেসবুকের মত ফর্ম তৈরি করতে পারলেও সেই CSRF Token এর র‍্যান্ডম স্ট্রিং টা তৈরি করতে পারবেনা। কারনে এটা র‍্যান্ডম, প্রতিটা ফর্মের জন্য আলাদা, প্রতিবার লোড হওয়ার সময় চেঞ্জ হয় এবং সেখানে এনকোডিং এর মাধ্যমে গোপনে ভ্যালিডিটির টাইমও সেট করা থাকে যে পাঁচ মিনিট বা দশ মিনিট পর আর এই কোড দিয়ে ফর্ম সাবমিট করলেও এক্সেপ্ট করবেনা!
এমনকি জাভাস্ক্রিপ্ট এর মাধ্যমে অন্য কোন ওয়েবসাইট ফেসবুকের এই CSRF Token (যেটা ফেসবুক আপনার ব্রাউজারে পাঠিয়েছে) কপি করেও নিতে পারবেনা! কারন আপনার ব্রাউজারটিই একাজ তাকে করতে দিবেনা!

১১) সো, যেহেতু আপনি সরাসরি ফর্ম সাবমিট করলে ভ্যালিড CSRF Token সহ সাবমিট হচ্ছে পক্ষান্তরে অন্য কোন ওয়েবসাইটের জাভাস্ক্রিপ্টের করা ফর্ম সেই CSRF Token দিতে পারছেনা তাই আপনার রিকুয়েস্ট গ্রহণ করা হবে এবং অন্যদেরটা গ্রহণ করা হবেনা!! সিম্পল!

জ্যাঙ্গোতে একারনেই (POST রিকুয়েস্টে) ফর্মের ক্ষেত্রে csrf token যুক্ত করা আবশ্যক! বোঝা গেল জিনিষটা?

 

আরো জানতে চাইলেঃ  https://en.wikipedia.org/wiki/Cross-site_request_forgery

Site Footer