Security Headers এবং Content Security Policy (CSP) একটি ওয়েব অ্যাপ্লিকেশনের সুরক্ষা নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে। ফাস্টএপিআই (FastAPI) তে সুরক্ষা নিশ্চিত করার জন্য বিভিন্ন ধরনের হেডার এবং CSP প্রয়োগ করা যেতে পারে। এই গাইডে আমরা Security Headers এবং CSP কীভাবে FastAPI তে ব্যবহার করা যায় তা আলোচনা করব।
১. Security Headers
Security Headers হল HTTP হেডার যা ব্রাউজারকে নির্দেশ দেয় কীভাবে অ্যাপ্লিকেশন সুরক্ষিতভাবে রেন্ডার হবে এবং কী ধরনের অপারেশনগুলো অনুমোদিত। এই হেডারগুলির মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনের নিরাপত্তা শক্তিশালী করতে পারেন, যেমন Cross-Site Scripting (XSS), Cross-Site Request Forgery (CSRF), এবং অন্যান্য নিরাপত্তা ঝুঁকি থেকে রক্ষা করতে।
নিরাপত্তা হেডারের উদাহরণ
- Strict-Transport-Security (HSTS)
এটি ব্রাউজারকে বলবে যে শুধুমাত্র HTTPS প্রোটোকলের মাধ্যমে যোগাযোগ করা হবে। - X-Content-Type-Options
এটি ব্রাউজারকে বলে যে, কোন ফাইলের কনটেন্ট টাইপ ভুলভাবে অনুমোদিত হওয়া উচিত নয়। - X-Frame-Options
এটি কন্ট্রোল করে যে পেজটি iframe-এ এম্বেড করা যাবে কিনা। - X-XSS-Protection
এটি XSS আক্রমণ প্রতিরোধ করতে সাহায্য করে। - Content-Security-Policy (CSP)
এটি কন্ট্রোল করে কী ধরনের স্ক্রিপ্ট বা রিসোর্স আপনার পেজে লোড হবে।
২. FastAPI তে Security Headers যোগ করা
FastAPI তে Security Headers যোগ করতে আপনি Middleware ব্যবহার করতে পারেন। নিচে কিছু সাধারণ নিরাপত্তা হেডার যোগ করার উদাহরণ দেওয়া হলো:
উদাহরণ: Security Headers যোগ করা
from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response
app = FastAPI()
class SecurityHeadersMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
response: Response = await call_next(request)
# Strict-Transport-Security (HSTS)
response.headers["Strict-Transport-Security"] = "max-age=31536000; includeSubDomains"
# X-Content-Type-Options
response.headers["X-Content-Type-Options"] = "nosniff"
# X-Frame-Options
response.headers["X-Frame-Options"] = "DENY"
# X-XSS-Protection
response.headers["X-XSS-Protection"] = "1; mode=block"
# Content-Security-Policy (CSP)
response.headers["Content-Security-Policy"] = "default-src 'self'; img-src 'self'; script-src 'self';"
return response
# Security Middleware যুক্ত করা
app.add_middleware(SecurityHeadersMiddleware)
@app.get("/")
async def read_root():
return {"message": "FastAPI with Security Headers!"}
এখানে:
- Strict-Transport-Security (HSTS): HTTPS প্রোটোকল ব্যবহারের জন্য নির্ধারিত করা হয়েছে।
- X-Content-Type-Options: কনটেন্ট টাইপ সনাক্তকরণের ভুল ব্লক করতে।
- X-Frame-Options: ফ্রেমিংয়ের আক্রমণ (Clickjacking) থেকে রক্ষা করতে।
- X-XSS-Protection: XSS আক্রমণ প্রতিরোধ করতে।
- Content-Security-Policy (CSP): এই হেডারটি ব্রাউজারকে বলে দেয় কোন কনটেন্ট (যেমন স্ক্রিপ্ট, স্টাইল) কি উত্স (origin) থেকে লোড করা যাবে।
রেসপন্স:
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'; img-src 'self'; script-src 'self';
৩. Content Security Policy (CSP)
Content Security Policy (CSP) হল একটি নিরাপত্তা ফিচার যা ওয়েব অ্যাপ্লিকেশনকে Cross-Site Scripting (XSS) এবং অন্যান্য ম্যালিসিয়াস আক্রমণ থেকে রক্ষা করতে ব্যবহৃত হয়। CSP হেডারটি বলে দেয় ব্রাউজারকে কোন উত্স থেকে কোন ধরনের কনটেন্ট লোড করা যাবে এবং কোন উত্স থেকে লোড করা যাবে না।
CSP হেডারের মূল উদ্দেশ্য:
- সক্রিপ্ট লোডিং নিয়ন্ত্রণ করা: শুধু নির্দিষ্ট উত্স থেকে স্ক্রিপ্ট লোড করার অনুমতি দেয়।
- স্টাইলশিট লোডিং নিয়ন্ত্রণ করা: নির্দিষ্ট উত্স থেকে CSS লোড করার অনুমতি দেয়।
- রিসোর্স লোডিং নিয়ন্ত্রণ করা: শুধু নির্দিষ্ট উত্স থেকে ছবি বা অন্য রিসোর্স লোড করার অনুমতি দেয়।
উদাহরণ: Content Security Policy সেট করা
from fastapi import FastAPI
from starlette.middleware.base import BaseHTTPMiddleware
from starlette.responses import Response
app = FastAPI()
class CSPMiddleware(BaseHTTPMiddleware):
async def dispatch(self, request, call_next):
response: Response = await call_next(request)
# Content-Security-Policy
response.headers["Content-Security-Policy"] = (
"default-src 'self'; "
"img-src 'self'; "
"script-src 'self'; "
"style-src 'self';"
)
return response
# CSP Middleware যুক্ত করা
app.add_middleware(CSPMiddleware)
@app.get("/")
async def read_root():
return {"message": "FastAPI with Content Security Policy!"}
এখানে:
default-src 'self': সমস্ত কনটেন্ট শুধুমাত্র একই উত্স (যেমন,example.com) থেকে লোড হবে।img-src 'self': ইমেজ শুধুমাত্র একই উত্স থেকে লোড হবে।script-src 'self': স্ক্রিপ্ট শুধুমাত্র একই উত্স থেকে লোড হবে।style-src 'self': স্টাইলশিট শুধুমাত্র একই উত্স থেকে লোড হবে।
রেসপন্স:
Content-Security-Policy: default-src 'self'; img-src 'self'; script-src 'self'; style-src 'self';
৪. CSP এর অন্যান্য কনফিগারেশন
CSP হেডারটি কনফিগার করার সময় কিছু অতিরিক্ত কনফিগারেশন ব্যবহার করা যায়, যেমন:
report-uri: যদি কোনো CSP নিয়ম ভঙ্গ হয়, তাহলে একটি নির্দিষ্ট URL তে রিপোর্ট পাঠানো যাবে।unsafe-inline: ইন্টারনাল স্ক্রিপ্ট বা স্টাইলশিট অনুমোদন দেয় (যা নিরাপত্তার জন্য সাধারণত পরিহার করা হয়)।unsafe-eval: JavaScript কোডেeval()ব্যবহারের অনুমতি দেয়।
উদাহরণ: CSP এর রিপোর্টিং যুক্ত করা
response.headers["Content-Security-Policy"] = (
"default-src 'self'; "
"img-src 'self'; "
"script-src 'self'; "
"style-src 'self'; "
"report-uri /report-csp-violations;"
)
এখানে, যদি CSP নিয়ম ভঙ্গ হয়, তাহলে ব্রাউজার /report-csp-violations URL তে রিপোর্ট পাঠাবে।
Security Headers এবং Content Security Policy (CSP) হল ওয়েব অ্যাপ্লিকেশন সুরক্ষার জন্য অত্যন্ত গুরুত্বপূর্ণ। FastAPI তে এই হেডারগুলি ব্যবহার করে আপনি XSS, CSRF, Clickjacking এবং অন্যান্য নিরাপত্তা ঝুঁকি থেকে সুরক্ষা নিশ্চিত করতে পারেন। FastAPI তে সুরক্ষা হেডার এবং CSP সেট করা খুবই সহজ, এবং এগুলোর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে শক্তিশালী নিরাপত্তা ব্যবস্থা প্রদান করতে পারেন।
Read more