একটি Content-Security-Policy প্রতিটি নির্দেশনা ধরে যাচাই করুন এবং দেখুন স্ক্রিপ্ট কীভাবে তা এড়িয়ে যায়
আপনার ব্রাউজারে চলে। আপনি যা লেখেন তা কোথাও পাঠানো হয় না। যাচাই করা হয়েছে 16 অক্টোবর, 2026।একটি Content-Security-Policy ব্রাউজারকে জানায় স্ক্রিপ্ট ও অন্যান্য কনটেন্ট কোথা থেকে লোড হতে পারে। এটি ইনজেক্ট করা স্ক্রিপ্ট থেকে তখনই রক্ষা করে, যখন script-src 'unsafe-inline', ওয়াইল্ডকার্ড ও এড়ানো যায় এমন হোস্ট এড়িয়ে চলে, object-src 'none' থাকে এবং base-uri সীমিত থাকে। Google-এর 2016 সালের একটি গবেষণায় দেখা গেছে বাস্তব নীতিগুলির 94.7% এড়ানো যেত; 'strict-dynamic'-সহ nonce এর সমাধান করে।
এই পৃষ্ঠাটি ইংরেজি মূল লেখা থেকে যন্ত্রের সাহায্যে অনুবাদ করা হয়েছে। এই অনুবাদটি এখনও কোনো মানুষ পর্যালোচনা করেননি, তাই ইংরেজি সংস্করণটিকেই নির্ভরযোগ্য ধরুন। ইংরেজি মূল লেখাটি পড়ুন
নীতিটি, পুরো Content-Security-Policy হেডার লাইনটি, অথবা যে <meta> ট্যাগে এটি আছে সেটি পেস্ট করুন।
ফলাফলগুলি পড়ুন, সবচেয়ে গুরুতরটি আগে: প্রতিটিতে নির্দেশনার নাম এবং আক্রমণকারী তা দিয়ে কী করতে পারে তা বলা থাকে।
নির্দেশনার সারণিতে ভুল বানানের নাম এবং ব্রাউজার যে উৎসগুলি উপেক্ষা করবে সেগুলি দেখে নিন।
নীতিটি ঠিক করুন, অথবা কঠোর টেমপ্লেট থেকে শুরু করুন, এবং শুধু নোট বাকি না থাকা পর্যন্ত আবার পেস্ট করুন।
একটি Content-Security-Policy-তে সূক্ষ্ম ভুল করে ফেলা সহজ, আর ব্রাউজার কখনও অভিযোগ করে না: যে নির্দেশনা তারা পড়তে পারে না তা উপেক্ষা করা হয়। এই টুলটি নীতিটি ঠিক সেভাবেই পড়ে যেভাবে CSP Level 3 স্পেসিফিকেশন অনুযায়ী একটি ব্রাউজার পড়ে, তারপর বাস্তব নীতি নিয়ে Google-এর 2016 সালের গবেষণার ফলাফলের ভিত্তিতে তার বিচার করে।
ফলাফল, সবচেয়ে গুরুতরটি আগে।
| গুরুত্ব | উদাহরণ |
|---|---|
| উচ্চ | nonce ছাড়া 'unsafe-inline', script-src-এ * বা https:, object-src 'none' নয়, nonce ছাড়া 'strict-dynamic', একটি অনুপস্থিত সেমিকোলন, উদ্ধৃতিচিহ্ন ছাড়া self |
| মাঝারি | 'unsafe-eval', JSONP বা পুরোনো AngularJS পরিবেশন করে বলে পরিচিত অনুমোদিত হোস্ট, খোলা base-uri, সাধারণ http উৎস, অজানা নির্দেশনা |
| নিম্ন | frame-ancestors নেই, ছোট nonce, অপ্রচলিত নির্দেশনা, পুনরাবৃত্তি, স্টাইলের জন্য 'unsafe-inline' |
| নোট | রিপোর্টিং নেই, report-to ছাড়া report-uri, কঠোর নীতিতে ব্রাউজার যে উৎসগুলি উপেক্ষা করে |
বিকল্প নির্দেশনা প্রয়োগ করা হয়। script-src না থাকলে তার জায়গায় default-src বিচার করা হয়; দুটিই না থাকলে স্ক্রিপ্ট যেকোনো জায়গা থেকে লোড হতে পারে, এবং টুলটি তা জানায়।
যা খুশি পেস্ট করুন। শুধু নীতি, পুরো হেডার লাইন, অথবা একটি <meta http-equiv> ট্যাগ। meta ট্যাগে দেওয়া নীতি frame-ancestors, report-uri বা sandbox ব্যবহার করতে পারে না, এবং টুলটি সেগুলি চিহ্নিত করে। কমা দিয়ে আলাদা করা একাধিক নীতি থাকা হেডার ভাগ করা হয়, কারণ প্রতিটিই কার্যকর হয়।
প্রতিটি উৎস যাচাই করা হয়। কীওয়ার্ড, nonce, হ্যাশ (SHA-256, 384 বা 512-এর সঠিক দৈর্ঘ্যসহ), স্কিম ও হোস্ট ব্যাকরণ অনুযায়ী যাচাই করা হয়, এবং ভুল বানানের নির্দেশনার জন্য একটি পরামর্শ দেওয়া হয়, যেমন frame-ancestor থেকে frame-ancestors।
কঠোর টেমপ্লেট। একটি ট্যাপে nonce-ভিত্তিক একটি নীতি লোড হয়: nonce ও 'strict-dynamic'-সহ script-src, object-src 'none' এবং base-uri 'none'। আপনার সার্ভারকে প্রতিটি রেসপন্সে হেডারে এবং প্রতিটি script ট্যাগে একটি নতুন র্যান্ডম nonce লিখতে হবে।
নীতিটি আপনার ব্রাউজারে পড়া হয় এবং কোথাও পাঠানো হয় না। একটি চালু সাইট যে হেডারগুলি পাঠায় তা আনতে HTTP Headers Checker ব্যবহার করুন।
না। 'unsafe-inline' থাকলে আক্রমণকারী পেজে যে স্ক্রিপ্টই ইনজেক্ট করতে পারুক তা চলে, আর ঠিক এটি থামানোর জন্যই Content-Security-Policy। তার বদলে প্রতিটি ইনলাইন স্ক্রিপ্টের জন্য একটি nonce বা হ্যাশ ব্যবহার করুন। nonce বা হ্যাশ থাকলে আধুনিক ব্রাউজার 'unsafe-inline' উপেক্ষা করে, তাই পুরোনো ব্রাউজারের জন্য বিকল্প হিসেবে এটি রেখে দেওয়া ক্ষতিকর নয়।
'strict-dynamic' কীওয়ার্ড nonce বা হ্যাশের মাধ্যমে বিশ্বস্ত একটি স্ক্রিপ্টকে আরও স্ক্রিপ্ট লোড করতে দেয়, আর যে ব্রাউজারগুলি এটি সমর্থন করে সেগুলি হোস্টের অনুমোদিত তালিকা ও https: উপেক্ষা করে। nonce-এর সঙ্গে মিলে এটি এমন একটি নীতি দেয় যা একই সঙ্গে কঠোর ও সহজে চালু করা যায়। কোনো nonce বা হ্যাশ ছাড়া এটি সব স্ক্রিপ্ট আটকে দেয়।
object বা embed ট্যাগ দিয়ে লোড হওয়া প্লাগইন script-src-এর নিয়মের বাইরে স্ক্রিপ্ট চালাতে পারে, এবং অনুমোদিত হোস্টে থাকা পুরোনো Flash ফাইল এড়িয়ে যাওয়ার একটি সাধারণ উপায় ছিল। খুব কম সাইটেরই এখনও প্লাগইন দরকার, তাই object-src 'none' পুরো পথটিই বন্ধ করে দেয়। object-src না থাকলে default-src প্রযোজ্য হয়, যা প্রায়ই 'none' নয়।
জনপ্রিয় স্ক্রিপ্ট হোস্ট, যেমন বড় CDN ও কিছু Google ডোমেন, JSONP এন্ডপয়েন্ট বা AngularJS-এর পুরোনো সংস্করণ পরিবেশন করে। যে আক্রমণকারী মার্কআপ ইনজেক্ট করতে পারে, সে নিজের কোড চালাতে ওই অনুমোদিত ফাইলগুলি লোড করতে পারে। Google-এর 2016 সালের গবেষণায় দেখা গেছে হোস্ট তালিকাভিত্তিক বাস্তব নীতিগুলির 94.7% এভাবে এড়ানো যেত; 'strict-dynamic'-সহ nonce এই সমস্যা এড়ায়।
ব্রাউজার নির্দেশনাটি উপেক্ষা করে এবং কনসোলে একটি সতর্কবার্তা লেখে, কিন্তু নীতির বাকি অংশ কার্যকর থাকে, ফলে পেজটি নিঃশব্দে সেই সুরক্ষা হারায়। frame-ancestors-এর বদলে frame-ancestor-এর মতো একটি টাইপো পেজটিকে ক্লিকজ্যাকিংয়ের জন্য খোলা রাখে। এই টুলটি অজানা নির্দেশনাগুলির তালিকা দেয় এবং আপনি সম্ভবত যে নামটি বোঝাতে চেয়েছিলেন তা প্রস্তাব করে।
হ্যাঁ, পেজের head-এ একটি meta http-equiv ট্যাগ দিয়ে, তবে সেখানে তিনটি নির্দেশনা কাজ করে না: frame-ancestors, report-uri এবং sandbox। এছাড়া meta ট্যাগের নীতি কেবল ট্যাগের পরের কনটেন্টে প্রযোজ্য হয়। নীতিটি HTTP রেসপন্স হেডার হিসেবে পাঠানোই নির্ভরযোগ্য পছন্দ; হেডার নিয়ন্ত্রণ ছাড়া স্ট্যাটিক হোস্টিংয়ের জন্য meta ট্যাগ উপযুক্ত।
হার ও নিয়ম বদলায়; কোনো অঙ্কের ওপর নির্ভর করার আগে সূত্রটি দেখে নিন।
এখনও আটকে আছেন? CSP মূল্যায়নকারী সম্পর্কে প্রশ্ন করুন আর যিনি জানেন তিনিই উত্তর দিতে পারেন। কোনো অ্যাকাউন্ট লাগবে না।