Flask অ্যাপ্লিকেশনে Security Headers এবং Content Security Policy (CSP) ব্যবহার করা একটি গুরুত্বপূর্ণ নিরাপত্তা ব্যবস্থা। এই নিরাপত্তা ব্যবস্থা ওয়েব অ্যাপ্লিকেশনকে বিভিন্ন ধরনের আক্রমণ থেকে সুরক্ষা প্রদান করে, যেমন Cross-Site Scripting (XSS), Clickjacking, Cross-Site Request Forgery (CSRF) এবং আরও অন্যান্য নিরাপত্তা হুমকি।
Security Headers এবং Content Security Policy (CSP) এর মাধ্যমে Flask অ্যাপ্লিকেশনকে নিরাপদ রাখা যায় এবং সঠিকভাবে কনফিগার করা হলে আপনার অ্যাপ্লিকেশনটি নিরাপদে চলতে পারবে।
১. Security Headers
HTTP Security Headers হলো HTTP রেসপন্সের হেডার যা ব্রাউজারকে ওয়েব পেজের আচরণ এবং নিরাপত্তা নির্ধারণ করতে সহায়ক হয়। Flask অ্যাপ্লিকেশনগুলিতে সঠিকভাবে সিকিউরিটি হেডার ব্যবহার করা হলে তা অ্যাপ্লিকেশনকে বিভিন্ন ধরনের আক্রমণ থেকে রক্ষা করতে সাহায্য করবে।
Flask অ্যাপ্লিকেশনে Security Headers কনফিগার করা
Flask-এ সিকিউরিটি হেডার যুক্ত করার জন্য after_request() ডেকোরেটর ব্যবহার করা হয়। এটি প্রতি রিকোয়েস্টের পরে হেডার যুক্ত করার জন্য ব্যবহৃত হয়।
উদাহরণ:
from flask import Flask, jsonify
app = Flask(__name__)
@app.after_request
def add_security_headers(response):
# HTTP 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'; script-src 'self'; style-src 'self';"
return response
@app.route('/')
def home():
return "Hello, Secure Flask!"
if __name__ == "__main__":
app.run(debug=True)
এখানে:
Strict-Transport-Security(HSTS): এটি ব্রাউজারকে বলে যে শুধু HTTPS সংযোগ ব্যবহার করা উচিত।X-Content-Type-Options: এটি ব্রাউজারকে কোনো ফাইলের MIME type সঠিকভাবে শনাক্ত করতে বলে, যাতে MIME sniffing আক্রমণ থেকে সুরক্ষা পাওয়া যায়।X-Frame-Options: এটি পেজটিকে অন্য সাইটের iframe এর মধ্যে ইনক্লুড করা থেকে বিরত রাখে, যা Clickjacking আক্রমণ প্রতিরোধ করে।X-XSS-Protection: এটি ব্রাউজারের মধ্যে XSS আক্রমণ প্রতিরোধ করার জন্য ব্যবহৃত হয়।Content-Security-Policy (CSP): এটি স্ক্রিপ্ট এবং অন্যান্য কন্টেন্টের উৎস নিয়ন্ত্রণ করে, যা Cross-Site Scripting (XSS) আক্রমণ প্রতিরোধে সাহায্য করে।
২. Content Security Policy (CSP)
Content Security Policy (CSP) একটি সিকিউরিটি ফিচার যা ওয়েব অ্যাপ্লিকেশনকে Cross-Site Scripting (XSS) এবং অন্যান্য ইন্টারনেটভিত্তিক আক্রমণ থেকে রক্ষা করতে ব্যবহৃত হয়। CSP এর মাধ্যমে আপনি নির্দিষ্ট করতে পারেন যে কোন উৎস থেকে স্ক্রিপ্ট, স্টাইল, ইমেজ, এবং অন্যান্য রিসোর্স লোড করা যাবে। এটি আপনার অ্যাপ্লিকেশনকে বেশ কিছু সিকিউরিটি হুমকির হাত থেকে সুরক্ষিত রাখে।
CSP-এর মূল ফিচার:
default-src: এটি ডিফল্ট উৎস নির্ধারণ করে, অর্থাৎ, কোন উৎস থেকে সমস্ত রিসোর্স (স্ক্রিপ্ট, ইমেজ, স্টাইল) লোড করা যাবে।script-src: এটি স্ক্রিপ্ট লোড করার জন্য অনুমোদিত উৎস নির্ধারণ করে।style-src: এটি স্টাইল শিট লোড করার জন্য অনুমোদিত উৎস নির্ধারণ করে।img-src: এটি চিত্র (ইমেজ) লোড করার জন্য অনুমোদিত উৎস নির্ধারণ করে।connect-src: এটি সংযোগ (যেমন AJAX কল) করার জন্য অনুমোদিত উৎস নির্ধারণ করে।
উদাহরণ:
@app.after_request
def set_csp(response):
response.headers['Content-Security-Policy'] = """
default-src 'self';
script-src 'self' https://apis.google.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
connect-src 'self';
"""
return response
এখানে:
'self': এটি বর্তমান ডোমেইন থেকে লোড করা সব কিছু অনুমোদিত।https://apis.google.com: এটি Google APIs থেকে স্ক্রিপ্ট লোড করতে অনুমোদিত।'unsafe-inline': এটি ইনলাইন CSS অনুমোদিত করে, তবে সাধারণত এটি unsafe বলে গণ্য হয়। এটি শুধুমাত্র এক্সপেরিমেন্টাল বা নির্দিষ্ট ক্ষেত্রে ব্যবহার করা উচিত।data:: এটি ইমেজ হিসেবেdata URIঅনুমোদিত করে।
৩. CSP এবং 'unsafe-inline' এবং 'unsafe-eval'
CSP-এ 'unsafe-inline' এবং 'unsafe-eval' সিকিউরিটি ঝুঁকির কারণ হতে পারে, কারণ এগুলি ব্রাউজারের মধ্যে ইনলাইন স্ক্রিপ্ট এবং eval ফাংশন ব্যবহারের অনুমতি দেয়। যখন এই দুটি ব্যবহার করা হয়, তখন অ্যাপ্লিকেশন কিছুটা নিরাপত্তাহীন হয়ে পড়ে।
unsafe-inline:
- যখন
'unsafe-inline'ব্যবহার করা হয়, তখন আপনি সরাসরি HTML তে JavaScript কোড রাখতে পারবেন, যা XSS আক্রমণের সুযোগ সৃষ্টি করে।
unsafe-eval:
'unsafe-eval'ব্যবহার করা হলেeval()ফাংশন ব্যবহৃত হতে পারে, যা নিরাপত্তা ঝুঁকির কারণ হতে পারে। এটা সঠিকভাবে কনফিগার না করলে আক্রমণকারীদের জন্য সুযোগ সৃষ্টি করতে পারে।
৪. Flask-এ CSP Reporting
CSP রিপোর্টিং ফিচারটি ব্যবহার করে আপনি কিভাবে আপনার CSP নিয়ম ভঙ্গ হচ্ছে তা জানতে পারেন। এর মাধ্যমে, আপনি CSP নীতির মধ্যে কোনো ত্রুটি বা আক্রমণ সনাক্ত করতে পারেন।
@app.after_request
def set_csp_report(response):
response.headers['Content-Security-Policy'] = """
default-src 'self';
report-uri /csp-violation-report-endpoint;
"""
return response
এখানে:
report-uri: এটি CSP লঙ্ঘনের রিপোর্ট পাঠানোর জন্য URL নির্ধারণ করে। আপনি একটি সার্ভার সাইড URL তৈরি করতে পারেন যা রিপোর্ট গ্রহণ করবে।
৫. Flask-এ CSP এবং অন্যান্য নিরাপত্তা হেডার কনফিগার করা
একত্রিতভাবে, Flask অ্যাপ্লিকেশনটি সুরক্ষিত করতে Security Headers এবং CSP হেডার কনফিগার করা যেতে পারে। নিচে একটি উদাহরণ দেওয়া হলো যেখানে সমস্ত সিকিউরিটি হেডার যুক্ত করা হয়েছে:
from flask import Flask, jsonify
app = Flask(__name__)
@app.after_request
def apply_security_headers(response):
response.headers['Strict-Transport-Security'] = 'max-age=31536000; includeSubDomains'
response.headers['X-Content-Type-Options'] = 'nosniff'
response.headers['X-Frame-Options'] = 'DENY'
response.headers['X-XSS-Protection'] = '1; mode=block'
response.headers['Content-Security-Policy'] = "default-src 'self'; script-src 'self'; style-src 'self';"
return response
@app.route('/')
def home():
return jsonify(message="Hello, Secure Flask App!")
if __name__ == "__main__":
app.run(debug=True)
এখানে:
- Security Headers এবং CSP একসাথে ব্যবহার করা হয়েছে, যাতে অ্যাপ্লিকেশনটি Cross-Site Scripting (XSS), Clickjacking, এবং অন্যান্য আক্রমণের হাত থেকে সুরক্ষিত থাকে।
Security Headers এবং Content Security Policy (CSP) Flask অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে খুবই গুরুত্বপূর্ণ। CSP আক্রমণকারীদের স্ক্রিপ্টের ম্যালিসিয়াস কার্যক্রম ব্লক করতে সাহায্য করে, এবং Security Headers সাধারণ ওয়েব সিকিউরিটি সমস্যা থেকে সুরক্ষা প্রদান করে। Flask অ্যাপ্লিকেশনে সঠিকভাবে এই হেডারগুলো কনফিগার করে আপনি আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং শক্তিশালী করতে পারবেন।
Read more