CherryPy তে Media এবং Static Files (যেমন CSS, JavaScript, ইমেজ ফাইল, এবং অন্যান্য স্ট্যাটিক রিসোর্স) সঠিকভাবে পরিচালনা করা এবং সেগুলোর নিরাপত্তা ব্যবস্থা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। বিশেষত যখন অ্যাপ্লিকেশন প্রোডাকশন পরিবেশে চলে আসে, তখন স্ট্যাটিক ফাইলগুলি ওয়েব অ্যাপ্লিকেশনের জন্য একাধিক নিরাপত্তা ঝুঁকি তৈরি করতে পারে। এই ঝুঁকিগুলি যেমন অথোরাইজেশন ও অ্যাক্সেস কন্ট্রোল, অপ্রত্যাশিত স্ক্রিপ্টিং (XSS) এবং ফাইল আক্রমণ (file uploads) অন্তর্ভুক্ত।
CherryPy তে স্ট্যাটিক ফাইলের নিরাপত্তা ব্যবস্থা নিশ্চিত করতে কয়েকটি পদ্ধতি রয়েছে, যা অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ।
Static Files এর জন্য নিরাপত্তা ব্যবস্থা
১. স্ট্যাটিক ফাইলের অ্যাক্সেস কন্ট্রোল (Access Control)
স্ট্যাটিক ফাইলের জন্য অ্যাক্সেস কন্ট্রোল সবচেয়ে গুরুত্বপূর্ণ নিরাপত্তা ব্যবস্থা। অনেক সময় কিছু ফাইল বা ডিরেক্টরি নিরাপদ রাখার জন্য অ্যাক্সেস কন্ট্রোল করা প্রয়োজন হতে পারে, যাতে unauthorized বা অবৈধ অ্যাক্সেস না ঘটে।
CherryPy তে এই ধরনের কন্ট্রোল সহজেই করা যায়। আপনি IP রিস্ট্রিকশন বা এনক্রিপ্টেড পাসওয়ার্ড ব্যবহার করতে পারেন, যাতে সুনির্দিষ্ট ক্লায়েন্ট ছাড়া অন্য কেউ স্ট্যাটিক ফাইল অ্যাক্সেস করতে না পারে।
উদাহরণ: স্ট্যাটিক ফাইলের অ্যাক্সেস কন্ট্রোল
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "Hello, this is a secure CherryPy app!"
@cherrypy.expose
def restricted_area(self):
return "This is a restricted area!"
# কনফিগারেশন
conf = {
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.dir': '/path/to/static',
'tools.staticdir.permissions': 'r' # শুধুমাত্র রিড এক্সেস অনুমোদিত
},
'/restricted_area': {
'tools.auth_basic.on': True,
'tools.auth_basic.realm': 'Restricted Area',
'tools.auth_basic.checkpassword': lambda user, pwd: user == "admin" and pwd == "password"
}
}
if __name__ == '__main__':
cherrypy.quickstart(MyApp(), '/', conf)
এখানে, /restricted_area রুটের জন্য Basic Authentication যোগ করা হয়েছে, যা কেবল নির্দিষ্ট ইউজারের জন্য অ্যাক্সেসযোগ্য। এছাড়া /static ডিরেক্টরিতে শুধুমাত্র রিড এক্সেস অনুমোদন করা হয়েছে।
২. ফাইল আপলোড এবং ফাইল টাইপ সুরক্ষা (File Upload and File Type Security)
স্ট্যাটিক ফাইলগুলোর নিরাপত্তা নিশ্চিত করতে ফাইল আপলোড এবং ফাইল টাইপ সুরক্ষা অত্যন্ত গুরুত্বপূর্ণ। আপনি যে ফাইলগুলি অনুমোদিত তা চেক করতে পারেন এবং অপ্রত্যাশিত বা বিপজ্জনক ফাইল টাইপগুলিকে ব্লক করতে পারেন।
উদাহরণ: ফাইল আপলোড নিরাপত্তা
import cherrypy
import os
class FileUploadApp:
@cherrypy.expose
def index(self):
return '''
<form action="upload" method="post" enctype="multipart/form-data">
Select file: <input type="file" name="upload" />
<button type="submit">Upload</button>
</form>
'''
@cherrypy.expose
def upload(self, upload):
# ফাইলের এক্সটেনশন চেক করা হচ্ছে
allowed_extensions = ['jpg', 'jpeg', 'png', 'gif']
filename = upload.filename
ext = filename.split('.')[-1].lower()
if ext not in allowed_extensions:
raise cherrypy.HTTPError(400, "Invalid file type. Allowed types are: jpg, jpeg, png, gif.")
file_path = os.path.join("uploads", filename)
with open(file_path, 'wb') as f:
f.write(upload.file.read())
return f"File uploaded successfully: {filename}"
if __name__ == '__main__':
cherrypy.quickstart(FileUploadApp())
এই উদাহরণে, ফাইল আপলোড মেথডটি শুধুমাত্র jpg, jpeg, png, এবং gif ফাইল টাইপগুলোকে অনুমোদন করে। অন্য ফাইল টাইপগুলো ব্লক হয়ে যাবে।
৩. Cross-Site Scripting (XSS) প্রতিরোধ
স্ট্যাটিক ফাইলগুলির মাধ্যমে Cross-Site Scripting (XSS) আক্রমণ প্রতিরোধের জন্য, আপনি নিশ্চিত করতে হবে যে স্ট্যাটিক ফাইলগুলো সঠিকভাবে স্যানিটাইজ করা হচ্ছে। আপনি Content Security Policy (CSP) ব্যবহার করে স্ক্রিপ্ট বা কোড ইনজেকশন থেকে নিরাপদ থাকতে পারেন।
উদাহরণ: CSP (Content Security Policy) কনফিগারেশন
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "This is a secure page with CSP protection."
@cherrypy.expose
def about(self):
return "This is an About page with CSP protection."
if __name__ == '__main__':
cherrypy.config.update({
'tools.csp.on': True, # CSP চালু করা
'tools.csp.policy': "default-src 'self'; script-src 'self'; object-src 'none';" # নিরাপদ CSP পলিসি
})
cherrypy.quickstart(MyApp())
এখানে, Content Security Policy চালু করা হয়েছে, যাতে শুধুমাত্র নির্দিষ্ট সোর্স থেকে স্ক্রিপ্ট ও অন্যান্য কন্টেন্ট লোড করা হয়। এটি XSS আক্রমণ প্রতিরোধে সহায়তা করে।
৪. অ্যাচেভমেন্ট প্রোটেকশন (Cache-Control)
স্ট্যাটিক ফাইলের নিরাপত্তা নিশ্চিত করতে Cache-Control হেডার ব্যবহার করা উচিত, বিশেষ করে এমন ফাইলগুলির জন্য যেগুলোর কন্টেন্ট নিয়মিত পরিবর্তিত হয়।
উদাহরণ: Cache-Control সেটিংস
import cherrypy
class MyApp:
@cherrypy.expose
def index(self):
return "Secure static file caching."
if __name__ == '__main__':
cherrypy.config.update({
'tools.staticdir.on': True,
'tools.staticdir.dir': './static',
'tools.staticdir.cache_control': 'private, no-store, must-revalidate'
})
cherrypy.quickstart(MyApp())
এখানে, Cache-Control হেডার দিয়ে সেট করা হয়েছে, যাতে স্ট্যাটিক ফাইলগুলি ক্যাশে না থাকে এবং নিরাপদভাবে পুনরায় লোড হয়।
CherryPy তে Media এবং Static Files এর নিরাপত্তা ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ। সঠিকভাবে অ্যাক্সেস কন্ট্রোল, ফাইল আপলোড নিরাপত্তা, XSS প্রতিরোধ, এবং ক্যাশ কন্ট্রোল ইত্যাদি ব্যবস্থা গ্রহণ করে আপনি আপনার ওয়েব অ্যাপ্লিকেশনকে নিরাপদ রাখতে পারেন। CherryPy এর কনফিগারেশন টুলস এবং নিরাপত্তা ফিচার ব্যবহার করে আপনি স্ট্যাটিক ফাইলের অ্যাক্সেস কন্ট্রোল এবং সিকিউরিটি নিশ্চিত করতে পারবেন।
Read more