সাইট না ভেঙে কনটেন্ট সিকিউরিটি পলিসি (CSP)

Security2026-09-18TryQuickToolBox

আপনি শুনেছেন যে ক্রস-সাইট স্ক্রিপ্টিং (XSS) এবং ডেটা ইনজেকশন আক্রমণ থেকে আপনার সাইটকে রক্ষা করার জন্য কনটেন্ট সিকিউরিটি পলিসি (CSP) অপরিহার্য। কিন্তু আপনি যখন এটি যোগ করার চেষ্টা করেন, আপনার সাইট ভেঙে যায়: ছবিগুলি অদৃশ্য হয়ে যায়, স্ক্রিপ্টগুলি চলা বন্ধ করে দেয়, স্টাইলগুলি হারিয়ে যায়। এটি নিরাপত্তা এবং কার্যকারিতার মধ্যে একটি বাণিজ্যের মতো মনে হয়। কিন্তু তা হতে হবে না।

এই গাইডে, আপনি আপনার সাইট না ভেঙে CSP প্রয়োগ করার একটি ব্যবহারিক, ধাপে ধাপে পদ্ধতি শিখবেন। আমরা মূল ডিরেক্টিভগুলি, কীভাবে নন্স এবং হ্যাশ ব্যবহার করবেন এবং কীভাবে নিরাপদে পরীক্ষা করবেন তা কভার করব। শেষে, আপনার একটি কার্যকর CSP থাকবে যা ব্যবহারকারীর অভিজ্ঞতার সাথে আপস না করে নিরাপত্তা বাড়ায়।

CSP কী এবং কেন এটি সাইট ভেঙে দেয়?

কনটেন্ট সিকিউরিটি পলিসি একটি ব্রাউজার নিরাপত্তা মান যা আপনাকে আপনার পৃষ্ঠায় কোন সম্পদ (স্ক্রিপ্ট, স্টাইল, ছবি, ফন্ট ইত্যাদি) লোড করা যাবে তা সীমাবদ্ধ করতে দেয়। এটি একটি HTTP হেডারের মাধ্যমে সরবরাহ করা হয় যেমন Content-Security-Policy: default-src 'self'।

CSP সাইট ভেঙে দেয় কারণ এটি আপনার নীতির সাথে মেলে না এমন কোনও সম্পদ ব্লক করে। আপনার যদি ইনলাইন স্ক্রিপ্ট, CDN থেকে বহিরাগত স্ক্রিপ্ট বা ইনলাইন স্টাইল থাকে তবে সেগুলি ব্লক করা হবে যদি না আপনি স্পষ্টভাবে অনুমতি দেন। ডিফল্ট আচরণ হল অনুমোদিত নয় এমন সবকিছু ব্লক করা, তাই একটি কঠোর নীতি দ্রুত একটি সাইট ভেঙে দিতে পারে।

মূল বিষয় হল একটি অনুমোদনমূলক নীতি দিয়ে শুরু করা এবং লঙ্ঘনের জন্য পর্যবেক্ষণ করার সময় ধীরে ধীরে এটি কঠোর করা।

আপনার জানা প্রয়োজন এমন মূল CSP ডিরেক্টিভ

CSP বিভিন্ন সম্পদ প্রকার নিয়ন্ত্রণ করতে ডিরেক্টিভ ব্যবহার করে। এখানে সবচেয়ে সাধারণগুলি রয়েছে:

আপনি একটি হেডারে একাধিক ডিরেক্টিভ সেট করতে পারেন, সেমিকোলন দিয়ে আলাদা করে। উদাহরণস্বরূপ:

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://images.example.com

প্রতিটি ডিরেক্টিভ স্পেস-বিভাজিত সোর্সের তালিকা গ্রহণ করে। সোর্সগুলি কীওয়ার্ড হতে পারে যেমন 'self', 'unsafe-inline', 'unsafe-eval', অথবা URL, অথবা নন্স/হ্যাশ।

ধাপে ধাপে: আপনার সাইট না ভেঙে CSP প্রয়োগ করুন

CSP নিরাপদে চালু করতে এই ধাপগুলি অনুসরণ করুন।

  1. শুধুমাত্র রিপোর্ট নীতি দিয়ে শুরু করুন। প্রয়োগকারী হেডারের পরিবর্তে Content-Security-Policy-Report-Only হেডার ব্যবহার করুন। এটি আপনাকে দেখতে দেয় কী ব্লক করা হবে প্রকৃতপক্ষে ব্লক না করে।
  2. একটি অনুমোদনমূলক নীতি সেট করুন। default-src 'self' 'unsafe-inline' 'unsafe-eval' https: এর মতো কিছু দিয়ে শুরু করুন যাতে বেশিরভাগ জিনিস অনুমোদিত হয়। এটি ভাঙন কম করে।
  3. লঙ্ঘন রিপোর্ট সংগ্রহ করুন। লঙ্ঘন লগ করে এমন একটি এন্ডপয়েন্টে report-uri কনফিগার করুন। ব্লক করা সম্পদ চিহ্নিত করতে এই রিপোর্টগুলি পর্যালোচনা করুন।
  4. লঙ্ঘনগুলি ঠিক করুন। ইনলাইন স্ক্রিপ্ট/স্টাইল এড়াতে আপনার কোড আপডেট করুন, অথবা নন্স/হ্যাশ যোগ করুন। বহিরাগত সম্পদ অনুমোদিত ডোমেনে সরান।
  5. ধীরে ধীরে নীতিটি কঠোর করুন। রিফ্যাক্টর করার পরে 'unsafe-inline' এবং 'unsafe-eval' সরান। অনুমোদিত ডোমেন সংকীর্ণ করুন।
  6. প্রয়োগ মোডে স্যুইচ করুন। রিপোর্টগুলি কোনও অপ্রত্যাশিত ব্লক দেখায় না একবার, হেডারটি Content-Security-Policy ( -Report-Only ছাড়া) এ পরিবর্তন করুন।
  7. ধারাবাহিকভাবে পর্যবেক্ষণ করুন। নতুন সমস্যাগুলি ধরতে রিপোর্ট এন্ডপয়েন্ট সক্রিয় রাখুন।

এই ক্রমবর্ধমান পদ্ধতি নিশ্চিত করে যে আপনি নিরাপত্তা উন্নত করার সময় আপনার সাইট ভাঙবেন না।

ইনলাইন স্ক্রিপ্টের জন্য নন্স এবং হ্যাশ ব্যবহার করা

ইনলাইন স্ক্রিপ্টগুলি CSP ভাঙার একটি সাধারণ কারণ। 'unsafe-inline' অনুমোদন করার পরিবর্তে একটি নন্স (একবার ব্যবহৃত সংখ্যা) বা হ্যাশ ব্যবহার করুন।

নন্স পদ্ধতি: প্রতি অনুরোধে একটি র্যান্ডম নন্স তৈরি করুন, এটি আপনার CSP হেডারে যোগ করুন এবং আপনার স্ক্রিপ্ট ট্যাগে অন্তর্ভুক্ত করুন।

Content-Security-Policy: script-src 'nonce-abc123'
<script nonce="abc123">...</script>

হ্যাশ পদ্ধতি: আপনার ইনলাইন স্ক্রিপ্টের SHA হ্যাশ গণনা করুন এবং নীতিতে যোগ করুন।

Content-Security-Policy: script-src 'sha256-xyz...'

হ্যাশগুলি স্থির ইনলাইন স্ক্রিপ্টের জন্য সেরা যা প্রায়শই পরিবর্তিত হয় না। নন্সগুলি গতিশীল কন্টেন্টের জন্য ভাল।

স্টাইলের জন্য, আপনি নন্স বা হ্যাশও ব্যবহার করতে পারেন, তবে লক্ষ্য করুন যে নন্স সহ style-src ইনলাইন স্টাইল অ্যাট্রিবিউট (যেমন style="...") কভার করে না। সেগুলির জন্য, আপনার 'unsafe-inline' প্রয়োজন অথবা ক্লাসে রিফ্যাক্টর করা প্রয়োজন।

সাধারণ CSP ডিরেক্টিভ এবং তাদের প্রভাব

ডিরেক্টিভ এটি কী নিয়ন্ত্রণ করে সাধারণ সোর্স
default-src সমস্ত সম্পদ প্রকারের জন্য ফলব্যাক 'self', https:
script-src জাভাস্ক্রিপ্ট সোর্স 'self', 'nonce-...', 'sha256-...', https://cdn.com
style-src CSS সোর্স 'self', 'unsafe-inline', 'nonce-...'
img-src ছবির সোর্স 'self', data:, https://images.com
connect-src AJAX, WebSocket, fetch 'self', https://api.com
font-src ওয়েব ফন্ট 'self', https://fonts.gstatic.com
frame-src Iframes 'self', https://youtube.com

আপনার নীতি তৈরি করার সময় এই টেবিলটি দ্রুত রেফারেন্স হিসাবে ব্যবহার করুন।

আপনার CSP পরীক্ষা এবং পর্যবেক্ষণ

প্রয়োগ করার আগে, পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন। ব্রাউজার ডেভেলপার টুল ব্যবহার করুন: কনসোল ট্যাব CSP লঙ্ঘনগুলি ত্রুটি হিসাবে দেখায়। নেটওয়ার্ক ট্যাব CSP হেডার দেখায়।

স্বয়ংক্রিয় পরীক্ষার জন্য, গুগলের CSP Evaluator (অনলাইন) বা csp_evaluator npm প্যাকেজের মতো সরঞ্জামগুলি বিবেচনা করুন। এগুলি দুর্বল নীতিগুলি সনাক্ত করতে সহায়তা করে।

উৎপাদনে লঙ্ঘন সংগ্রহ করতে একটি রিপোর্ট এন্ডপয়েন্ট সেট আপ করুন। আপনি Report URI এর মতো একটি পরিষেবা ব্যবহার করতে পারেন বা নিজের এন্ডপয়েন্ট তৈরি করতে পারেন যা ফাইল বা ডাটাবেসে লগ করে। নতুন সমস্যাগুলি ধরতে নিয়মিত রিপোর্ট বিশ্লেষণ করুন।

মনে রাখবেন: CSP একটি রূপালী বুলেট নয়। এটি প্রতিরক্ষার একটি স্তর। এটি ইনপুট বৈধতা, আউটপুট এনকোডিং এবং অন্যান্য নিরাপত্তা সেরা অনুশীলনের সাথে একত্রিত করুন।

সাধারণ জিজ্ঞাসা

Content-Security-Policy এবং Content-Security-Policy-Report-Only এর মধ্যে পার্থক্য কী?

প্রয়োগকারী হেডার (Content-Security-Policy) লঙ্ঘন ব্লক করে। শুধুমাত্র রিপোর্ট হেডার (Content-Security-Policy-Report-Only) শুধুমাত্র লঙ্ঘন রিপোর্ট করে ব্লক না করে, আপনাকে নিরাপদে একটি নীতি পরীক্ষা করার অনুমতি দেয়।

আমি কি onclick এর মতো ইনলাইন ইভেন্ট হ্যান্ডলারগুলির সাথে CSP ব্যবহার করতে পারি?

না, ইনলাইন ইভেন্ট হ্যান্ডলারগুলি CSP দ্বারা ব্লক করা হয় যদি না আপনি 'unsafe-inline' ব্যবহার করেন (যা নিরুৎসাহিত) বা addEventListener ব্যবহার করতে রিফ্যাক্টর করেন। আরও ভাল নিরাপত্তার জন্য, ইনলাইন ইভেন্ট হ্যান্ডলার এড়িয়ে চলুন।

আমি কীভাবে CSP এর সাথে Google Analytics অনুমোদন করব?

আপনার script-src এবং connect-src ডিরেক্টিভে Google Analytics ডোমেন যোগ করুন। উদাহরণস্বরূপ: script-src 'self' https://www.googletagmanager.com; connect-src 'self' https://www.google-analytics.com। সর্বশেষ প্রয়োজনীয়তার জন্য Google এর ডকুমেন্টেশন দেখুন।

CSP প্রয়োগ করা একটি বেদনাদায়ক প্রক্রিয়া হতে হবে না। একটি ক্রমবর্ধমান পদ্ধতির সাথে, আপনি আপনার সাইট ব্যাহত না করে XSS এবং অন্যান্য আক্রমণ থেকে আপনার ব্যবহারকারীদের রক্ষা করতে পারেন। শুধুমাত্র রিপোর্ট মোড দিয়ে শুরু করুন, লঙ্ঘনগুলি ঠিক করুন এবং সময়ের সাথে আপনার নীতি কঠোর করুন।

আপনার CSP রিপোর্টের জন্য JSON কনফিগারেশন ফাইলগুলি দ্রুত ফরম্যাট বা যাচাই করতে হলে, আপনার JSON ডেটা সুন্দর এবং ডিবাগ করতে আমাদের JSON Formatter ব্যবহার করে দেখুন।