Cross-Site Request Forgery (CSRF) একটি নিরাপত্তা ঝুঁকি যেখানে একজন আক্রমণকারী একটি ব্যবহারকারীর পরিচয়ে অবৈধ রিকোয়েস্ট পাঠিয়ে দেয়। এটি তখন ঘটে যখন একজন ব্যবহারকারী লগইন অবস্থায় থাকেন এবং আক্রমণকারী একটি ক্ষতিকর রিকোয়েস্ট পাঠিয়ে তাদের অ্যাকাউন্টে কোনো পরিবর্তন ঘটানোর চেষ্টা করে। Flask-SeaSurf এক্সটেনশন ব্যবহার করে Flask অ্যাপ্লিকেশনে CSRF (Cross-Site Request Forgery) আক্রমণ থেকে সুরক্ষা নিশ্চিত করা যায়।
Flask-SeaSurf কি?
Flask-SeaSurf একটি Flask এক্সটেনশন যা CSRF আক্রমণ প্রতিরোধে সহায়ক। এটি প্রতি POST, PUT, PATCH, এবং DELETE রিকোয়েস্টের জন্য একটি CSRF Token যাচাই করে, যা নিশ্চিত করে যে রিকোয়েস্টটি সঠিক ব্যবহারকারী থেকে এসেছে এবং কোনো আক্রমণকারী এই রিকোয়েস্টটি পাঠায়নি।
১. Flask-SeaSurf ইনস্টল করা
প্রথমে Flask-SeaSurf ইনস্টল করতে হবে:
pip install flask-seasurf
২. Flask-SeaSurf সেটআপ করা
Flask অ্যাপ্লিকেশনে Flask-SeaSurf ব্যবহার করার জন্য, আপনি প্রথমে এটি আপনার অ্যাপে যুক্ত করবেন। তারপর আপনাকে সমস্ত ফর্মে CSRF টোকেন ইনক্লুড করতে হবে, যা Flask-SeaSurf নিজে থেকেই হ্যান্ডেল করবে।
উদাহরণ:
from flask import Flask, render_template, request, redirect, url_for
from flask_seasurf import SeaSurf
app = Flask(__name__)
# CSRF Protection Enable করা
app.config['SECRET_KEY'] = 'আপনার-গোপন-কী' # Flask-এ CSRF Protection এর জন্য সিক্রেট কী প্রয়োজন
csrf = SeaSurf(app)
@app.route("/", methods=["GET", "POST"])
def home():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
# এখানে, ফর্মের ইনপুট ডেটা প্রসেস করতে পারেন
return redirect(url_for('home'))
return render_template("index.html")
if __name__ == "__main__":
app.run(debug=True)
এখানে:
csrf = SeaSurf(app): এটি Flask অ্যাপে Flask-SeaSurf এক্সটেনশন সক্রিয় করে।app.config['SECRET_KEY']: Flask অ্যাপ্লিকেশনে CSRF টোকেন সঠিকভাবে কাজ করার জন্য একটি সিক্রেট কী প্রয়োজন।
৩. CSRF Token ফর্মে ব্যবহার করা
Flask-SeaSurf স্বয়ংক্রিয়ভাবে CSRF টোকেন ফর্মে ইনক্লুড করে, তবে আপনাকে এটি ম্যানুয়ালি ফর্মের মধ্যে নির্দিষ্ট করতে হবে। সাধারণত Jinja2 টেমপ্লেট ইঞ্জিনের মাধ্যমে এটি করা হয়।
উদাহরণ (index.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask CSRF Example</title>
</head>
<body>
<h2>Login Form</h2>
<form method="POST">
{{ csrf_token() }} <!-- CSRF Token ফর্মে ইনক্লুড করা -->
<label for="username">Username:</label>
<input type="text" name="username" required><br><br>
<label for="password">Password:</label>
<input type="password" name="password" required><br><br>
<input type="submit" value="Login">
</form>
</body>
</html>
এখানে:
{{ csrf_token() }}: এটি Jinja2 টেমপ্লেট ফাংশন, যা CSRF টোকেন ইনক্লুড করে এবং ফর্মের অংশ হিসেবে রেন্ডার হয়।
৪. CSRF Protection কাস্টমাইজ করা
Flask-SeaSurf স্বয়ংক্রিয়ভাবে POST, PUT, PATCH, এবং DELETE রিকোয়েস্টের জন্য CSRF টোকেন যাচাই করে, তবে আপনি চাইলে কিছু রাউট বা নির্দিষ্ট URL গুলি থেকে CSRF সুরক্ষা নিষ্ক্রিয় করতে পারেন।
উদাহরণ:
# কিছু রাউট থেকে CSRF সুরক্ষা নিষ্ক্রিয় করা
csrf.exempt(['public', 'another_route'])
@app.route('/public')
def public():
return "This is a public page without CSRF protection"
@app.route('/another_route')
def another_route():
return "This route has no CSRF protection"
এখানে csrf.exempt() ফাংশন ব্যবহার করে আপনি নির্দিষ্ট রাউটগুলি থেকে CSRF সুরক্ষা নিষ্ক্রিয় করেছেন।
৫. Flask-SeaSurf Error Handling
যদি CSRF টোকেন যাচাইয়ে কোনো সমস্যা হয়, তবে Flask-SeaSurf একটি 400 (Bad Request) এরর রিটার্ন করে।
উদাহরণ:
@app.errorhandler(400)
def bad_request(error):
return "Bad request, CSRF token missing or invalid!", 400
এখানে @app.errorhandler(400) ব্যবহার করে আপনি কাস্টম ত্রুটি পৃষ্ঠা তৈরি করেছেন, যা CSRF সম্পর্কিত ত্রুটির জন্য ব্যবহার হবে।
৬. Flask-SeaSurf এর সুবিধা
- এনক্রিপ্টেড CSRF টোকেন: Flask-SeaSurf আপনাকে শক্তিশালী CSRF সুরক্ষা প্রদান করে।
- সহজ ইন্টিগ্রেশন: Flask অ্যাপে Flask-SeaSurf দ্রুত এবং সহজে ইন্টিগ্রেট করা যায়।
- স্বয়ংক্রিয় CSRF টোকেন জেনারেশন: ফর্মে CSRF টোকেন ইনজেক্ট করতে
{{ csrf_token() }}ব্যবহার করা সহজ। - স্বয়ংক্রিয় নিরাপত্তা যাচাই: Flask-SeaSurf স্বয়ংক্রিয়ভাবে CSRF টোকেনের সাথে রিকোয়েস্ট যাচাই করে।
Flask-SeaSurf ব্যবহার করে আপনি Flask অ্যাপ্লিকেশনগুলোকে CSRF আক্রমণ থেকে সুরক্ষিত রাখতে পারেন। এটি খুবই কার্যকরী এবং সহজ পদ্ধতি, বিশেষ করে যখন আপনি ফর্ম এবং API রিকোয়েস্টে সুরক্ষা নিশ্চিত করতে চান। Flask-SeaSurf এক্সটেনশন Flask অ্যাপ্লিকেশনের জন্য CSRF প্রতিরোধ ব্যবস্থাপনা সহজ এবং নিরাপদ করে তোলে।
Read more