SQL Injection এবং XSS থেকে সুরক্ষা

Flask এর Security Best Practices - ফ্লাস্ক (Flask) - Web Development

271

SQL Injection এবং Cross-Site Scripting (XSS) হল ওয়েব অ্যাপ্লিকেশন সিকিউরিটির দুটি সাধারণ কিন্তু অত্যন্ত ক্ষতিকর আক্রমণ। Flask অ্যাপ্লিকেশনের মধ্যে এই ধরনের আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে কিছু গুরুত্বপূর্ণ পদ্ধতি অবলম্বন করা উচিত। চলুন, Flask অ্যাপ্লিকেশনে SQL Injection এবং XSS আক্রমণ থেকে সুরক্ষা কীভাবে নিশ্চিত করা যায়, সে সম্পর্কে আলোচনা করি।


১. SQL Injection থেকে সুরক্ষা

SQL Injection হল এমন একটি আক্রমণ যেখানে আক্রমণকারী SQL কোড ইনজেক্ট করে যা ডাটাবেসের অখণ্ডতা নষ্ট করতে পারে, অথবা গোপন তথ্য চুরি করতে পারে।

SQL Injection আক্রমণ কীভাবে কাজ করে?

ধরা যাক, আপনার অ্যাপ্লিকেশনে একটি লগইন ফর্ম রয়েছে যেখানে ব্যবহারকারী নাম এবং পাসওয়ার্ড দিয়ে লগইন করতে পারে। যদি এই ডেটাগুলো সরাসরি SQL কুয়েরিতে ব্যবহার করা হয়, তবে আক্রমণকারী খারাপ SQL কোড ইনজেক্ট করতে পারে, যেমন:

SELECT * FROM users WHERE username = 'admin' AND password = 'password' OR 1=1;

এতে ডাটাবেসে সব ব্যবহারকারীর তথ্য বের করে আনা যায়। তবে, Flask এ SQL Injection থেকে সুরক্ষা নিশ্চিত করার জন্য কিছু পদ্ধতি অনুসরণ করতে হবে।

SQL Injection থেকে সুরক্ষা:

  1. Parameterized Queries: SQL কুয়েরি তৈরি করার সময় ব্যবহারকারীর ইনপুটকে সরাসরি SQL স্টেটমেন্টে যোগ না করে, parameterized queries ব্যবহার করুন।
  2. SQLAlchemy ব্যবহার করুন: Flask-এ ডাটাবেস অপারেশনের জন্য SQLAlchemy ORM (Object Relational Mapper) ব্যবহার করলে SQL Injection প্রতিরোধ করা যায়, কারণ এটি সুরক্ষিত এবং parameterized কুয়েরি ব্যবহার করে।
উদাহরণ: SQLAlchemy ব্যবহার করে SQL Injection থেকে সুরক্ষা
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    password = db.Column(db.String(120), nullable=False)

@app.route("/login", methods=["POST"])
def login():
    username = request.form['username']
    password = request.form['password']
    
    # সুরক্ষিত parameterized query
    user = User.query.filter_by(username=username, password=password).first()

    if user:
        return jsonify({"message": "Login successful!"}), 200
    else:
        return jsonify({"message": "Invalid credentials!"}), 401

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • filter_by() ব্যবহার করা হয়েছে, যা SQLAlchemy-এর একটি সুরক্ষিত পদ্ধতি যা SQL Injection আক্রমণ প্রতিরোধ করে।

২. Cross-Site Scripting (XSS) থেকে সুরক্ষা

XSS (Cross-Site Scripting) হল এমন একটি আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর ব্রাউজারে স্ক্রিপ্ট বা ম্যালিশিয়াস কোড ইনজেক্ট করে। এটি সাধারণত ইনপুট ফিল্ডের মাধ্যমে ঘটে, যেমন ফর্মে কমেন্ট বা অন্যান্য ইউজার ইনপুট।

XSS আক্রমণ কীভাবে কাজ করে?

যখন ব্যবহারকারী কোনো ইনপুট (যেমন HTML বা JavaScript) ওয়েবসাইটে প্রদান করে এবং সেটি যথাযথভাবে স্যানিটাইজ করা হয় না, তখন আক্রমণকারী স্ক্রিপ্ট বা ক্ষতিকর কোড ইনজেক্ট করতে পারে। উদাহরণস্বরূপ:

<script>alert('XSS Attack!');</script>

XSS থেকে সুরক্ষা:

  1. Jinja2 টেমপ্লেট সিস্টেম ব্যবহার করা: Flask ডিফল্টভাবে Jinja2 টেমপ্লেট ইঞ্জিন ব্যবহার করে, যা স্বয়ংক্রিয়ভাবে আউটপুট স্যানিটাইজ করে, অর্থাৎ ইনপুট HTML ট্যাগের মাধ্যমে স্ক্রিপ্ট ইনজেক্ট করা সম্ভব নয়।
  2. ম্যাজিক লাইন এবং ইনপুট স্যানিটাইজেশন: ফর্মের ইনপুটের উপর কাস্টম স্যানিটাইজেশন প্রয়োগ করুন যাতে HTML বা JavaScript কোড ইনপুট হিসেবে গ্রহণ না হয়।
উদাহরণ: Flask তে XSS থেকে সুরক্ষা
from flask import Flask, render_template_string

app = Flask(__name__)

@app.route("/greet/<name>")
def greet(name):
    # স্বয়ংক্রিয় স্যানিটাইজেশন: Jinja2 টেমপ্লেট ইনপুট স্যানিটাইজ করবে
    return render_template_string('<h1>স্বাগতম, {{ name }}!</h1>', name=name)

if __name__ == "__main__":
    app.run(debug=True)

এখানে:

  • {{ name }} এর মাধ্যমে যেহেতু Jinja2 টেমপ্লেট ইঞ্জিন ইনপুট স্যানিটাইজ করে, তাই ব্যবহারকারীর ইনপুট HTML বা JavaScript কোড হিসাবে চলে না।
  • Jinja2 স্বয়ংক্রিয়ভাবে স্পেশাল চিহ্নগুলো (যেমন <, >) escape করে দেয়, যা XSS আক্রমণ প্রতিরোধে সহায়ক।

৩. Flask-এ XSS এর আরও সুরক্ষা পদ্ধতি

  1. HTML Encoding: ব্যবহারকারী ইনপুট যে কোনও HTML রেসপন্সে সরাসরি প্রদর্শিত হলে, তা HTML ইনকোডিং করে দেখানো উচিত যাতে স্ক্রিপ্ট এক্সিকিউট না হয়।
  2. Content Security Policy (CSP): Content Security Policy হেডার ব্যবহার করে আপনি স্ক্রিপ্ট সোর্স নিয়ন্ত্রণ করতে পারেন এবং XSS আক্রমণ থেকে সুরক্ষা নিশ্চিত করতে পারেন।
  3. Flask-WTF এর মাধ্যমে ফর্ম ভ্যালিডেশন: Flask-WTF ব্যবহার করে ফর্ম ইনপুট স্যানিটাইজ এবং ভ্যালিডেশন করতে পারেন। এটি অতিরিক্ত সুরক্ষা নিশ্চিত করতে সাহায্য করে।

Flask অ্যাপ্লিকেশনে SQL Injection এবং XSS থেকে সুরক্ষা নিশ্চিত করতে Flask এর বিভিন্ন এক্সটেনশন এবং টুল ব্যবহার করা উচিত। SQLAlchemy ব্যবহার করে ডাটাবেসে সুরক্ষিত কুয়েরি তৈরি করা এবং Jinja2 টেমপ্লেট সিস্টেম ব্যবহার করে XSS আক্রমণ প্রতিরোধ করা সম্ভব। Flask অ্যাপ্লিকেশন সুরক্ষিত করার জন্য, এই পদ্ধতিগুলি অনুসরণ করে আপনি আপনার ওয়েবসাইট বা অ্যাপ্লিকেশনকে নিরাপদ রাখতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...