Security Considerations for File Upload

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর সঙ্গে File Upload এবং Handling
235

ফাইল আপলোড করা অনেক ধরনের অ্যাপ্লিকেশনে একটি সাধারণ কাজ হলেও, এটি যদি সঠিকভাবে নিরাপত্তা নিশ্চিত না করা হয়, তাহলে অ্যাপ্লিকেশনের সুরক্ষায় বড় সমস্যা তৈরি করতে পারে। FastAPI তে ফাইল আপলোড করার সময় নিরাপত্তা সমস্যা সমাধান করতে কিছু গুরুত্বপূর্ণ পদ্ধতি ও কৌশল আছে।

এই গাইডে, আমরা আলোচনা করব ফাইল আপলোডের সময় কিছু গুরুত্বপূর্ণ নিরাপত্তা চিন্তা এবং সেগুলোর সমাধান কীভাবে করা যায় তা।


১. ফাইল সাইজ সীমাবদ্ধ করা

একটি সাধারণ নিরাপত্তা প্র্যাকটিস হল ফাইল সাইজ সীমাবদ্ধ করা। বড় ফাইল আপলোড করলে সার্ভারটি অতিরিক্ত লোড হতে পারে, বা অ্যাটাকারের জন্য সার্ভারে স্টোরেজ খালি করার সুযোগ তৈরি হতে পারে। তাই ফাইলের সাইজ সীমাবদ্ধ করা উচিত।

FastAPI তে ফাইল সাইজ সীমাবদ্ধ করার উদাহরণ:

from fastapi import FastAPI, File, UploadFile
from starlette.requests import Request

app = FastAPI()

MAX_FILE_SIZE = 5 * 1024 * 1024  # 5MB

@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
    # ফাইলের সাইজ চেক করা
    file_size = len(await file.read())
    if file_size > MAX_FILE_SIZE:
        return {"error": "File size exceeds limit"}
    return {"filename": file.filename, "size": file_size}

এখানে, ফাইলের সাইজ 5MB এর বেশি হলে রিকোয়েস্ট গ্রহণ করা হবে না।


২. ফাইল টাইপ যাচাই করা

ফাইল আপলোডের সময় নিরাপত্তার জন্য এটি গুরুত্বপূর্ণ যে ফাইলের টাইপ যাচাই করা হয়। এটি নিশ্চিত করতে পারে যে অ্যাটাকারের আপলোড করা ম্যালিসিয়াস ফাইল (যেমন, স্ক্রিপ্ট, অ্যাপ্লিকেশন, বা ক্ষতিকারক এক্সটেনশনের ফাইল) গ্রহণ না করা হয়।

উদাহরণ: ফাইল টাইপ যাচাই

from fastapi import FastAPI, File, UploadFile
import mimetypes

app = FastAPI()

ALLOWED_FILE_TYPES = ["image/jpeg", "image/png", "application/pdf"]

@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
    # MIME টাইপ যাচাই
    mime_type, _ = mimetypes.guess_type(file.filename)
    
    if mime_type not in ALLOWED_FILE_TYPES:
        return {"error": "Invalid file type"}
    
    return {"filename": file.filename, "type": mime_type}

এখানে, MIME টাইপ যাচাই করা হয়েছে যাতে শুধুমাত্র নির্দিষ্ট ধরনের ফাইল যেমন JPEG, PNG, এবং PDF গ্রহণ করা হয়।


৩. ফাইলের নাম যাচাই করা

ফাইলের নাম নিরাপত্তা হুমকি সৃষ্টি করতে পারে, কারণ আক্রমণকারী কোনো ম্যালিসিয়াস ফাইলের নাম ব্যবহার করে সার্ভারে প্রবেশ করতে পারে। সুতরাং, ফাইলের নাম যাচাই করা খুবই গুরুত্বপূর্ণ।

উদাহরণ: ফাইল নাম যাচাই

import re
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
    # ফাইল নামের বৈধতা যাচাই
    if not re.match(r"^[a-zA-Z0-9_\-\.]+$", file.filename):
        return {"error": "Invalid file name"}
    
    return {"filename": file.filename}

এখানে, শুধুমাত্র আলফানিউমেরিক, ড্যাশ (-), আন্ডারস্কোর (_) এবং পিরিয়ড (.) চরিত্রসমূহ বৈধ হিসেবে গ্রহণ করা হচ্ছে। এর মাধ্যমে অবাঞ্ছিত বা ক্ষতিকর ফাইল নামগুলো ব্লক করা হবে।


৪. ফাইল আপলোডের স্থান সুরক্ষা

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

উদাহরণ: ফাইল সুরক্ষিত ডিরেক্টরিতে সংরক্ষণ

import os
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

UPLOAD_DIR = "./uploads"

# যদি ডিরেক্টরি না থাকে, তা তৈরি করা
if not os.path.exists(UPLOAD_DIR):
    os.makedirs(UPLOAD_DIR)

@app.post("/uploadfile/")
async def upload_file(file: UploadFile = File(...)):
    file_path = os.path.join(UPLOAD_DIR, file.filename)
    
    with open(file_path, "wb") as f:
        f.write(await file.read())
    
    return {"filename": file.filename, "path": file_path}

এখানে, ফাইল uploads/ নামক নিরাপদ ডিরেক্টরিতে সংরক্ষণ করা হচ্ছে, এবং কোনো ব্যবহারকারী সরাসরি ফাইলগুলোর উপর অ্যাক্সেস পাবে না।


৫. ফাইল কনটেন্ট স্ক্যানিং (Antivirus Check)

ফাইল আপলোডের সময়, ফাইলের কনটেন্ট ম্যালিসিয়াস বা ভাইরাস মুক্ত কিনা তা নিশ্চিত করার জন্য আপনাকে Antivirus স্ক্যানিং করা উচিত। যদিও FastAPI তে সরাসরি এই ধরনের স্ক্যানিং নেই, তবে আপনি থার্ড-পার্টি লাইব্রেরি যেমন ClamAV বা অন্য কোনো নিরাপত্তা সফটওয়্যার ব্যবহার করে স্ক্যান করতে পারেন।


৬. এলগোরিদম এবং আক্রমণ প্রতিরোধ

  • DDoS আক্রমণ প্রতিরোধ: বড় আকারের বা বেশ কয়েকটি ফাইল একসাথে আপলোড করা হলে এটি DDoS (Distributed Denial of Service) আক্রমণের কারণ হতে পারে। আপনি একাধিক ফাইল আপলোড সীমিত করতে পারেন।
  • Rate Limiting: একবারে কতটা ডাটা আপলোড করা যেতে পারে, সে বিষয়ে Rate Limiting সেট করা যায়। এর মাধ্যমে একে একে ফাইল আপলোড করার গতির উপর নিয়ন্ত্রণ রাখা যায়।

৭. ফাইল কনটেন্ট সাইজ এবং প্রকার সুরক্ষা

  • ফাইল সাইজ সীমাবদ্ধ করা: ফাইলের সাইজ সীমাবদ্ধ রাখার মাধ্যমে অ্যাটাকারের আপলোড করা অত্যন্ত বড় ফাইলগুলিকে ব্লক করা যেতে পারে।
  • ফাইল টাইপ যাচাই: শুধুমাত্র নির্দিষ্ট ধরনের ফাইল অনুমোদন করা উচিত, যেমন images, PDFs ইত্যাদি। MIME টাইপ চেকিং এবং File Extension চেকিং নিশ্চিত করতে হবে।

ফাইল আপলোড নিরাপত্তার জন্য অনেক গুরুত্বপূর্ণ সমস্যা নিয়ে আসে, এবং FastAPI তে ফাইল আপলোডের সময় আপনি বিভিন্ন নিরাপত্তা ব্যবস্থা গ্রহণ করতে পারেন। সেগুলির মধ্যে ফাইল সাইজ সীমাবদ্ধ করা, ফাইল টাইপ যাচাই, সেশন এবং সুরক্ষিত ডিরেক্টরিতে ফাইল সংরক্ষণ করা, এবং অ্যান্টিভাইরাস স্ক্যানিং অন্তর্ভুক্ত। এই ধরনের নিরাপত্তা ব্যবস্থা ব্যবহার করলে, অ্যাপ্লিকেশনটি ম্যালিসিয়াস ফাইল এবং অন্যান্য ঝুঁকি থেকে সুরক্ষিত থাকবে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...