CherryPy একটি লাইটওয়েট ওয়েব ফ্রেমওয়ার্ক, এবং এটি নিরাপত্তা ফিচারগুলির জন্য কিছু বিল্ট-ইন টুল সরবরাহ করে। এর মধ্যে দুটি গুরুত্বপূর্ণ নিরাপত্তা বিষয় হল CSRF (Cross-Site Request Forgery) এবং XSS (Cross-Site Scripting) আক্রমণ। এই দুই ধরনের আক্রমণ ওয়েব অ্যাপ্লিকেশনগুলির জন্য একটি বড় ধরনের নিরাপত্তা ঝুঁকি তৈরি করতে পারে, এবং সেগুলির প্রতিরোধের জন্য কিছু টেকনিক্যাল পদ্ধতি এবং কৌশল ব্যবহার করা গুরুত্বপূর্ণ।
CSRF (Cross-Site Request Forgery) কী?
CSRF হল একটি ধরনের আক্রমণ যেখানে এক ইউজারের অননুমোদিত রিকোয়েস্ট অন্য ইউজারের পক্ষ থেকে পাঠানো হয়, যখন ইউজার ইতোমধ্যে একটি ওয়েব অ্যাপে লগ ইন থাকে। আক্রমণকারী, ভিকটিমের পক্ষ থেকে রিকোয়েস্ট পাঠিয়ে সার্ভারকে গৌণতর ক্ষতি করতে পারে। যেমন, লগইন সেশনে অন্য কোনো কার্যক্রম সম্পাদন করা।
CSRF আক্রমণ থেকে বাঁচার কৌশল
- CSRF Token ব্যবহার: CSRF আক্রমণ থেকে রক্ষা পাওয়ার জন্য সুরক্ষিত এবং অনুমোদিত রিকোয়েস্ট যাচাই করার জন্য CSRF Token ব্যবহার করা হয়। এটি একটি ইউনিক এবং সেশন-ভিত্তিক টোকেন, যা ফর্মের মাধ্যমে পাঠানো হয় এবং সার্ভারে যাচাই করা হয়।
- HTTP Headers যাচাই করা: CSRF থেকে রক্ষা করতে, আপনি নিশ্চিত করতে পারেন যে রিকোয়েস্টটি শুধুমাত্র সেই ডোমেইন থেকে এসেছে যেখানে এটি অনুমোদিত।
- SameSite Cookies ব্যবহার: CSRF থেকে রক্ষা পেতে আপনি কুকির জন্য
SameSiteঅ্যাট্রিবিউট ব্যবহার করতে পারেন, যা তৃতীয় পক্ষের ওয়েবসাইট থেকে কুকি পাঠানো আটকায়।
CherryPy তে CSRF প্রতিরোধ কৌশল
CherryPy তে CSRF প্রতিরোধের জন্য সাধারণত CSRF Tokens ব্যবহার করা হয়। এখানে একটি উদাহরণ দেওয়া হলো যেখানে CSRF token ব্যবহার করে একটি ফর্মের জন্য CSRF সুরক্ষা তৈরি করা হয়েছে:
উদাহরণ: CSRF Token Implementation
import cherrypy
import uuid
class MyApp:
def __init__(self):
self.sessions = {}
@cherrypy.expose
def index(self):
# সেশন থেকে CSRF token পাওয়া
csrf_token = self.sessions.get('csrf_token')
# ফর্মের HTML কোড
return f'''
<html>
<body>
<form method="post" action="/submit">
<input type="hidden" name="csrf_token" value="{csrf_token}">
<input type="text" name="name" placeholder="আপনার নাম">
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, name, csrf_token):
# সেশন থেকে টোকেন যাচাই করা
if self.sessions.get('csrf_token') != csrf_token:
raise cherrypy.HTTPError(403, "CSRF আক্রমণ শনাক্ত করা হয়েছে!")
# ডেটা প্রক্রিয়া
return f"হ্যালো, {name}!"
@cherrypy.expose
def start_session(self):
# সেশন তৈরি করা এবং CSRF token জেনারেট করা
csrf_token = str(uuid.uuid4())
self.sessions['csrf_token'] = csrf_token
return "সেশন শুরু হয়েছে!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
- CSRF Token সেশন থেকে তৈরি করা হয় এবং ফর্মে hidden ফিল্ড হিসেবে পাঠানো হয়।
- রিকোয়েস্ট আসলে, CSRF টোকেন সার্ভারে সেশন ভ্যালুর সাথে তুলনা করা হয় এবং যদি মেলে না, ত্বরা ত্রুটি বার্তা দেখানো হয়।
XSS (Cross-Site Scripting) কী?
XSS হল একটি আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীর ব্রাউজারে ম্যালিসিয়াস স্ক্রিপ্ট ইনজেক্ট করে। এই স্ক্রিপ্ট ব্যবহারকারী বা অ্যাপ্লিকেশনের ডেটা চুরি করতে পারে, যেমন কুকি, সেশন আইডি বা অন্য গোপন তথ্য।
XSS আক্রমণ থেকে বাঁচার কৌশল
- Input Sanitization: ইউজারের ইনপুটে সঠিক স্যানিটাইজেশন ব্যবহার করা উচিত, যেন ম্যালিসিয়াস স্ক্রিপ্ট ইনজেক্ট করা না যায়।
- Output Encoding: যেকোনো ইউজার ইনপুটকে সঠিকভাবে output encode করা প্রয়োজন যাতে এটি স্ক্রিপ্ট হিসেবে কার্যকর না হয়।
- Content Security Policy (CSP): CSP হেডার ব্যবহার করে ব্রাউজারের মধ্যে নিরাপদ স্ক্রিপ্টিং পদ্ধতি নিয়ন্ত্রণ করা যায়।
CherryPy তে XSS Protection Techniques
CherryPy তে XSS প্রতিরোধ করতে, output encoding এবং input sanitization ব্যবহার করা হয়। নিচে একটি উদাহরণ দেয়া হলো যেখানে XSS থেকে রক্ষা পেতে ইনপুট স্যানিটাইজেশন এবং আউটপুট এনকোডিং ব্যবহার করা হয়েছে:
উদাহরণ: XSS Protection
import cherrypy
import html
class MyApp:
@cherrypy.expose
def index(self):
return '''
<html>
<body>
<form method="post" action="/submit">
<input type="text" name="message" placeholder="আপনার বার্তা">
<input type="submit" value="জমা দিন">
</form>
</body>
</html>
'''
@cherrypy.expose
def submit(self, message):
# ইনপুট স্যানিটাইজেশন এবং আউটপুট এনকোডিং
sanitized_message = html.escape(message) # XSS প্রতিরোধ
return f"আপনার বার্তা: {sanitized_message}"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
html.escape()ব্যবহার করে ইউজারের ইনপুট স্যানিটাইজ করা হয়েছে। এটি ইনপুটে থাকা সমস্ত HTML স্পেশাল ক্যারেক্টার (যেমন<,>,&,") HTML entities তে কনভার্ট করে, যাতে স্ক্রিপ্ট এক্সিকিউট না হয়।
CherryPy তে CSRF এবং XSS প্রতিরোধের জন্য কিছু সাধারণ টেকনিক্স ব্যবহার করা যেতে পারে, যেমন:
- CSRF Token ব্যবহার করে ফর্মের মাধ্যমে যাচাই করা যায় এবং অগ্রহণযোগ্য রিকোয়েস্ট আটকানো যায়।
- Input sanitization এবং output encoding ব্যবহার করে XSS আক্রমণ প্রতিরোধ করা যায়।
- Content Security Policy (CSP) হেডার ব্যবহার করে স্ক্রিপ্ট ইনজেকশন রোধ করা সম্ভব।
এই পদ্ধতিগুলি CherryPy অ্যাপ্লিকেশনগুলির নিরাপত্তা বাড়ানোর জন্য কার্যকরী এবং গুরুত্বপূর্ণ।
Read more