CSRF (Cross-Site Request Forgery) একটি নিরাপত্তা আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর অধিকার দিয়ে অবৈধ বা অনিচ্ছাকৃত কার্যক্রম সম্পন্ন করে। এটি সাধারণত এমনভাবে ঘটে যে, ব্যবহারকারী যখন একটি ওয়েবসাইটে লগ ইন থাকে এবং একই সময়ে অন্য একটি ম্যালিসিয়াস সাইটে গিয়ে সেখানে কোনো অ্যাকশন (যেমন ফর্ম সাবমিট) ট্রিগার করে, তখন সে ব্যক্তির অনুমতি ছাড়া সাইটটি তার তথ্য বা এক্সেস ব্যবহার করে অপব্যবহার করতে পারে।
Ruby on Rails CSRF আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে বিভিন্ন ধরনের নিরাপত্তা ব্যবস্থা নিয়ে আসে। Rails-এর built-in CSRF protection ফিচারটি স্বয়ংক্রিয়ভাবে এটি হ্যান্ডল করে থাকে।
CSRF আক্রমণ কীভাবে কাজ করে?
ধরা যাক, একটি ব্যবহারকারী একটি ওয়েব অ্যাপ্লিকেশনে লগ ইন করেছে এবং তার ব্রাউজারে session cookie সক্রিয় রয়েছে। এরপর যদি ওই ব্যবহারকারী কোনো ম্যালিসিয়াস সাইটে চলে যায়, যেখানে আক্রমণকারী একটি লুকানো ফর্ম তৈরি করেছে এবং ফর্মটিতে একটি অনুরোধ (যেমন, পাসওয়ার্ড পরিবর্তন বা অ্যাকাউন্ট মুছে ফেলা) পাঠানো হচ্ছে, তাহলে ঐ অনুরোধটি ব্যবহারকারীর নামে সার্ভারে যাবে।
এক্ষেত্রে, সার্ভার এটি বিশ্বাস করবে কারণ ব্রাউজারের session cookie প্রকৃত ব্যবহারকারীর সাথে সম্পর্কিত। এর ফলে অনিচ্ছাকৃতভাবে ক্ষতিকর কার্যক্রম হতে পারে।
Ruby on Rails এ CSRF Protection
Rails এ CSRF আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে কিছু built-in নিরাপত্তা ব্যবস্থা রয়েছে। এটি CSRF token ব্যবহার করে প্রতিটি ফর্ম সাবমিশন এবং AJAX রিকোয়েস্টকে ভেরিফাই করে।
১. CSRF Token
Rails প্রতিটি ফর্ম সাবমিশনে একটি CSRF token প্রদান করে যা সঠিকভাবে যাচাই করা হয়। CSRF token হল একটি অপ্রকাশিত এক্সপায়ারিং টোকেন যা ফর্মের অংশ হিসেবে পাঠানো হয়, এবং এটি শুধুমাত্র বৈধ ব্যবহারকারীদের মাধ্যমে তৈরি হওয়া অনুরোধগুলিকে অনুমোদন দেয়।
CSRF Token অটো জেনারেশন
প্রতিটি রেন্ডার হওয়া ফর্মে CSRF token স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয়, যখন আপনি form_for বা form_with ব্যবহার করেন। উদাহরণ:
<%= form_with model: @user do |form| %>
<%= form.text_field :name %>
<%= form.submit %>
<% end %>
এখানে, Rails স্বয়ংক্রিয়ভাবে একটি CSRF token আপনার ফর্মের মধ্যে অন্তর্ভুক্ত করবে। ফর্মটি যখন সাবমিট হবে, তখন সার্ভার এটি যাচাই করবে, যাতে কোনো ম্যালিসিয়াস অনুরোধ ব্লক করা যায়।
২. CSRF Token Validation
Rails CSRF token ভ্যালিডেশনকে অটো কার্যকর করে রাখে। যদি কোনো অনুরোধে CSRF token সঠিক না থাকে অথবা অনুপস্থিত থাকে, তবে এটি ActionController::InvalidAuthenticityToken এক্সসেপশনটি তুলে দেয় এবং অনুরোধটি প্রত্যাখ্যান করে।
আপনার অ্যাপ্লিকেশনটি যদি একটি POST, PATCH, PUT বা DELETE রিকোয়েস্ট প্রক্রিয়া করে, তবে Rails স্বয়ংক্রিয়ভাবে CSRF token যাচাই করবে। এই নিরাপত্তা নিশ্চিত করার জন্য, আপনাকে সাধারণত কিছু করার প্রয়োজন হয় না।
৩. Authenticity Token for AJAX Requests
যেহেতু AJAX রিকোয়েস্টগুলোও CSRF আক্রমণের শিকার হতে পারে, Rails এ AJAX রিকোয়েস্টগুলোর জন্য CSRF token ব্যবহারের ব্যবস্থা রয়েছে।
// JavaScript code to include CSRF token in AJAX request headers
$(document).ready(function() {
$(document).ajaxSend(function(event, xhr, settings) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
});
});
এখানে meta[name="csrf-token"] ট্যাগটি HTML হেডারে থাকে এবং এটি CSRF token ধারণ করে। AJAX রিকোয়েস্টে এটি প্রেরণ করার মাধ্যমে, Rails নিশ্চিত করে যে এটি একটি বৈধ অনুরোধ।
CSRF Protection এর প্রয়োগে কিছু কনফিগারেশন
Rails এ কিছু কনফিগারেশন সেটিংস রয়েছে যা CSRF protection কনফিগার করতে সাহায্য করে:
১. CSRF Protection Disable করা
কিছু ক্ষেত্রে, যেমন API এ কাজ করার সময়, CSRF protection প্রয়োজন হতে পারে না। তবে API রিকোয়েস্টে সাধারণত token-based authentication (যেমন JWT) ব্যবহার করা হয়, যা CSRF-এর বিপদকে এড়িয়ে যায়।
যদি আপনি বিশেষভাবে CSRF protection বন্ধ করতে চান, তাহলে আপনি আপনার অ্যাপ্লিকেশনের ApplicationController এ নিচের মতো সেট করতে পারেন:
class ApplicationController < ActionController::Base
protect_from_forgery with: :null_session
end
এটি CSRF protection নিষ্ক্রিয় করবে, তবে এটি API রিকোয়েস্টের জন্য একটি নিরাপদ পন্থা হতে পারে।
২. CSRF Exception Handling
কিছু রিকোয়েস্ট, যেমন API কল বা নির্দিষ্ট রিকোয়েস্ট, CSRF token প্রয়োজন না করলেও কাজ করতে পারে। আপনি skip_before_action ব্যবহার করে বিশেষ অ্যাকশনগুলির জন্য CSRF চেকিং বন্ধ করতে পারেন:
class ApplicationController < ActionController::Base
skip_before_action :verify_authenticity_token, only: [:some_action]
end
এটি some_action এর জন্য CSRF validation বন্ধ করবে।
সারমর্ম
CSRF (Cross-Site Request Forgery) একটি গুরুত্বপূর্ণ নিরাপত্তা ঝুঁকি, যা ব্যবহারকারীর অজান্তে ক্ষতিকর অনুরোধ পাঠানোর মাধ্যমে সাইটের নিরাপত্তা বিঘ্নিত করতে পারে। Ruby on Rails স্বয়ংক্রিয়ভাবে CSRF protection প্রদান করে, যা CSRF tokens ব্যবহার করে অনুরোধগুলির বৈধতা যাচাই করে। Rails এ CSRF protection সঠিকভাবে কার্যকর করতে, সাধারণত আপনাকে কোনো অতিরিক্ত কনফিগারেশন করার প্রয়োজন হয় না, তবে বিশেষ ক্ষেত্রে এটি কাস্টমাইজ বা ডিসেবল করা যেতে পারে। CSRF protection ব্যবহার করার মাধ্যমে আপনার অ্যাপ্লিকেশনটি এই ধরনের আক্রমণ থেকে সুরক্ষিত থাকে।
Read more