Ruby on Rails একটি শক্তিশালী ফ্রেমওয়ার্ক যা নিরাপত্তা সংক্রান্ত অনেক ফিচার এবং টুলস প্রদান করে। এটির Middleware এবং Filters ব্যবহারের মাধ্যমে নিরাপত্তা উন্নত করা সম্ভব। Middleware এবং Filters, দুটি পৃথক কনসেপ্ট হলেও, এগুলো একসঙ্গে নিরাপত্তা ও অ্যাপ্লিকেশনের কার্যক্ষমতা বৃদ্ধিতে সাহায্য করে।
Middleware কী?
Middleware হল এমন একটি সফটওয়্যার লেয়ার যা রিকোয়েস্ট এবং রেসপন্সের মধ্যে চলতে থাকে। এটি ইনকামিং রিকোয়েস্ট এবং আউটগোইং রেসপন্স উভয়ের ওপর কাজ করতে পারে। Rails অ্যাপ্লিকেশনে Middleware বিভিন্ন নিরাপত্তা চেক, ডেটা ফিল্টারিং এবং লগিং সহ অন্যান্য সিস্টেম অপারেশন করতে ব্যবহৃত হয়।
Rails অ্যাপ্লিকেশন তৈরি করার সময় বিভিন্ন ধরনের Middleware ডিফল্টভাবে অ্যাকটিভ থাকে, যেমন:
- Session Management: ইউজার সেশন ট্র্যাকিং।
- Cookie Handling: কুকি ইনজেকশন এবং ব্যবস্থাপনা।
- Request Logging: ইনকামিং রিকোয়েস্ট লগিং।
- Security Headers: HTTP সিকিউরিটি হেডার সেট করা।
Middleware সাধারণত config/application.rb বা config/environments/ ফোল্ডারের মধ্যে কনফিগার করা হয়। এর মাধ্যমে আপনি সিকিউরিটি পলিসি প্রয়োগ করতে পারেন, যেমন সেশন সিকিউরিটি, CORS, এবং CSRF প্রটেকশন।
Middleware এর উদাহরণ:
Rails এর config/application.rb এ একটি সিকিউরিটি-সম্পর্কিত Middleware কনফিগার করা যেতে পারে, যেমন:
config.middleware.use Rack::Attack
এটি ব্যবহার করে আপনি রেট লিমিটিং বা সন্দেহজনক ট্রাফিক ব্লক করতে পারেন।
Filters (before_action, after_action) এবং Authentication হ্যান্ডল করা
Filters হল Rails কন্ট্রোলারে ব্যবহৃত কোড ব্লক যা রিকোয়েস্ট হ্যান্ডলিংয়ের আগে (before), পরে (after), বা প্রক্রিয়াধীন (around) কাজ করতে পারে। এগুলোর মাধ্যমে আপনি কোডের পুনরাবৃত্তি কমাতে এবং নিরাপত্তা নিশ্চিত করতে পারবেন।
Filters এর ধরন:
- before_action: রিকোয়েস্ট প্রক্রিয়ার আগে একটি অ্যাকশন চালানোর জন্য ব্যবহৃত হয়।
- after_action: রিকোয়েস্ট প্রক্রিয়ার পর একটি অ্যাকশন চালানোর জন্য ব্যবহৃত হয়।
- around_action: রিকোয়েস্ট প্রক্রিয়াকরণের আগে এবং পরে একটি অ্যাকশন চালানোর জন্য ব্যবহৃত হয়।
১. before_action:
before_action রিকোয়েস্ট প্রক্রিয়াকরণের আগে নির্দিষ্ট কোড বা যাচাই-ব্যবস্থা চালাতে ব্যবহৃত হয়, যেমন ইউজারের অথেন্টিকেশন চেক করা।
class ApplicationController < ActionController::Base
before_action :authenticate_user!
private
def authenticate_user!
unless user_signed_in?
redirect_to login_path, alert: "You need to sign in first!"
end
end
end
এখানে, before_action :authenticate_user! ব্যবহার করে যেকোনো কন্ট্রোলারের অ্যাকশন চালানোর আগে ইউজারের অথেন্টিকেশন চেক করা হবে। যদি ইউজার লগইন না থাকে, তবে তাকে লগইন পেজে রিডিরেক্ট করা হবে।
২. after_action:
after_action রিকোয়েস্ট প্রক্রিয়া সম্পন্ন হওয়ার পর একটি অ্যাকশন বা প্রসেস চালাতে ব্যবহৃত হয়। এটি সাধারণত লগিং বা ক্লিন-আপ কার্যক্রমে ব্যবহৃত হয়।
class ApplicationController < ActionController::Base
after_action :log_request
private
def log_request
Rails.logger.info "Request completed at #{Time.now}"
end
end
এখানে, after_action :log_request ব্যবহার করে প্রতিটি রিকোয়েস্টের পর লগিং করা হবে।
৩. around_action:
around_action রিকোয়েস্ট প্রক্রিয়া শুরু হওয়ার আগে এবং শেষ হওয়ার পরে একটি কোড ব্লক চালাতে ব্যবহৃত হয়। এটি একাধিক অ্যাকশন একত্রে কভার করতে পারে।
class ApplicationController < ActionController::Base
around_action :measure_time
private
def measure_time
start_time = Time.now
yield # এটি আসল অ্যাকশনটি চালাবে
end_time = Time.now
Rails.logger.info "Request took #{end_time - start_time} seconds"
end
end
এখানে, around_action :measure_time ব্যবহার করে রিকোয়েস্ট প্রক্রিয়ার সময় মাপা হচ্ছে এবং সেই সময়টি লগ করা হচ্ছে।
Authentication হ্যান্ডল করা
Authentication হল একটি প্রক্রিয়া যা নিশ্চিত করে যে শুধুমাত্র অনুমোদিত ইউজাররা অ্যাপ্লিকেশন ব্যবহার করছে। Rails অ্যাপ্লিকেশনে সাধারণত Devise gem বা কাস্টম অথেন্টিকেশন সিস্টেম ব্যবহার করা হয়।
Devise Gem ব্যবহার করে Authentication:
Devise একটি জনপ্রিয় gem যা Rails অ্যাপ্লিকেশনগুলিতে ইউজার অথেন্টিকেশন সহজভাবে তৈরি করতে সাহায্য করে। Devise স্বয়ংক্রিয়ভাবে লগইন, রেজিস্ট্রেশন, লগআউট, পাসওয়ার্ড রিসেট, ইত্যাদি কাজ করে থাকে।
Devise ইনস্টলেশন:
প্রথমে Gemfile-এ Devise যুক্ত করুন:
gem 'devise'
এরপর, bundle ইনস্টল করুন:
bundle install
Devise ইনস্টল করতে:
rails generate devise:install
এটি ডিফল্ট কনফিগারেশন ফাইল এবং মাইগ্রেশন ফাইল তৈরি করবে। আপনি একটি User মডেল তৈরি করতে পারেন:
rails generate devise User
মাইগ্রেশন চালান:
rails db:migrate
এখন আপনার অ্যাপ্লিকেশন ইউজারের অথেন্টিকেশন সমর্থন করবে। আপনি before_action :authenticate_user! ব্যবহার করে কন্ট্রোলার-এ ইউজার অথেন্টিকেশন যাচাই করতে পারবেন।
Middleware এবং Filters এর মাধ্যমে Security Improvement
Middleware এবং Filters এর মাধ্যমে আপনি Rails অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে পারবেন। কিছু নিরাপত্তা কৌশল যা আপনি ব্যবহার করতে পারেন:
Cross-Site Request Forgery (CSRF) Protection: Rails ডিফল্টভাবে CSRF প্রটেকশন সক্ষম করে রাখে, যা Cross-Site Request Forgery আক্রমণ প্রতিরোধে সাহায্য করে। আপনি CSRF প্রটেকশন সুরক্ষিত রাখতে
protect_from_forgery with: :exceptionব্যবহার করতে পারেন।class ApplicationController < ActionController::Base protect_from_forgery with: :exception endRate Limiting (Middleware): Rack::Attack gem ব্যবহার করে আপনি রেট লিমিটিং প্রয়োগ করতে পারেন, যা অ্যাপ্লিকেশনের ওপর অতিরিক্ত রিকোয়েস্ট ব্লক করবে।
gem 'rack-attack'এটি ইনস্টল করার পর,
config/initializers/rack_attack.rbফাইলে কনফিগার করা যাবে।Session Hijacking Protection (Middleware): Rails অ্যাপ্লিকেশনে সেশন হাইজ্যাকিং থেকে রক্ষা পেতে সেশন কুকি সুরক্ষিত রাখতে হবে। আপনি সেশন কুকির
secureএবংhttponlyফ্ল্যাগ ব্যবহার করতে পারেন।config.session_store :cookie_store, secure: Rails.env.production?, httponly: trueAuthentication (Filters): কন্ট্রোলারের বিভিন্ন অ্যাকশনে
before_actionব্যবহার করে ইউজারের অথেন্টিকেশন যাচাই করতে পারেন। এটি শুধুমাত্র অথেন্টিকেটেড ইউজারদের অ্যাকশনগুলি এক্সেস করার অনুমতি দেবে।before_action :authenticate_user!
সারমর্ম
Middleware এবং Filters ব্যবহার করে Rails অ্যাপ্লিকেশনগুলির নিরাপত্তা আরও শক্তিশালী করা যায়। Middleware রিকোয়েস্ট এবং রেসপন্সের মধ্যে কার্যক্রম পরিচালনা করে যেমন রেট লিমিটিং, সেশন সিকিউরিটি এবং CSRF প্রটেকশন, যা অ্যাপ্লিকেশনের নিরাপত্তা বৃদ্ধি করে। Filters ব্যবহার করে, কন্ট্রোলারে অথেন্টিকেশন চেক এবং অন্যান্য সিকিউরিটি যাচাই কার্যকরীভাবে করা যায়, যেমন before_action এর মাধ্যমে ইউজারের অথেন্টিকেশন যাচাই করা। এই কৌশলগুলির মাধ্যমে আপনার অ্যাপ্লিকেশন আরও সুরক্ষিত এবং কার্যকরী হয়ে ওঠে।
Read more