স্ক্রিপ্ট-src-এ সমর্থিত হ্যাশগুলি প্রসারিত করা হচ্ছে

কার্লোস জোয়ান রাফায়েল ইবারা লোপেজ
Carlos Joan Rafael Ibarra Lopez
মোস্তফা এমরে এসার
Mustafa Emre Acer

প্রকাশিত: ১৭ নভেম্বর, ২০২৫

Chrome 141 থেকে, আপনি Chrome যে নতুন কন্টেন্ট সিকিউরিটি পলিসি (CSP) বৈশিষ্ট্যগুলি চালু করছে তা পরীক্ষা করার জন্য অরিজিন ট্রায়ালে যোগ দিতে পারেন। এই বৈশিষ্ট্যগুলি জাভাস্ক্রিপ্টের পরিচিত উৎসগুলিকে আরও ভালভাবে অ্যালোলিস্ট করে ওয়েবসাইটগুলিকে XSS থেকে নিজেদের রক্ষা করতে সাহায্য করে। পরিচিত জাভাস্ক্রিপ্ট অ্যালোলিস্ট করা এবং অন্যান্য সমস্ত উৎস ব্লক করা, XSS প্রতিরোধের একটি কার্যকর উপায়। আক্রমণকারী ইনজেক্ট করা জাভাস্ক্রিপ্ট অ্যালোলিস্টে থাকবে না, এবং তাই ব্লক করা হয়েছে।

এই বৈশিষ্ট্যগুলি ছাড়া, স্ক্রিপ্ট হোস্ট এবং সাইটের মধ্যে কোনও ননস যোগাযোগ ব্যবস্থা না থাকলে, অথবা স্ক্রিপ্টের সম্পূর্ণ হ্যাশ আগে থেকে না জেনে, সমস্ত জাভাস্ক্রিপ্ট উৎসগুলিকে অ্যালাউলিস্ট করে এমন একটি "কঠোর" CSP থাকা কঠিন। যদি স্ক্রিপ্টটি ঘন ঘন পরিবর্তিত হয় এবং একটি বিশ্বস্ত, কিন্তু পৃথক তৃতীয় পক্ষ দ্বারা হোস্ট করা হয় তবে এই দুটি পদ্ধতিই স্থাপন করা কঠিন। অতিরিক্তভাবে, যদি কোনও স্ক্রিপ্টের eval ব্যবহার করার প্রয়োজন হয়, তাহলে CSP বর্তমানে সমস্ত স্ক্রিপ্টের জন্য অ্যালাউলিস্ট eval প্রয়োজন, যা এটিকে অনেক দুর্বল করে তোলে।

আমরা script-src এ স্ক্রিপ্টের URL-ভিত্তিক allowlisting-এর জন্য একটি শক্তিশালী প্রক্রিয়া এবং eval-এ কল allowlist-এর জন্য একটি প্রক্রিয়া প্রদান করে এই শূন্যতা পূরণ করার চেষ্টা করছি। আপনি script-src এ বিদ্যমান হ্যাশ প্রক্রিয়া ব্যবহার করে নির্দিষ্ট স্ক্রিপ্টের URL allowlist করতে এবং eval-এ স্থানান্তরিত জাভাস্ক্রিপ্ট (এবং অন্যান্য eval-সদৃশ ফাংশন) করতে সক্ষম হবেন। যদিও URL-ভিত্তিক allowlisting সম্ভবত একটি অখণ্ডতা-ভিত্তিক CSP-এর মতো কঠোর নয়, এই প্রক্রিয়াটি বিদ্যমান হোস্টনেম allowlist-এর উপর একটি দুর্দান্ত উন্নতি হওয়া উচিত।

আমরা বিশ্বাস করি যে এটি CSP নীতি স্থাপন করা সহজ করে তোলে যা অননুমোদিত ইনলাইন এবং ইভাল স্ক্রিপ্টগুলিকে ব্লক করে XSS কে শক্তিশালীভাবে প্রশমিত করে। এই নতুন বৈশিষ্ট্যগুলি সাবধানতার সাথে ডিজাইন এবং বাস্তবায়িত করা হয়েছে যাতে সাইটগুলি এমন একটি নীতি সেট করতে সক্ষম হয় যা নতুন কার্যকারিতা সমর্থন করে এমন ব্রাউজারগুলিতে আরও ভাল সুরক্ষা প্রদান করে, যে ব্রাউজারগুলি তা করে না তাদের সুরক্ষা ভাঙা বা হ্রাস না করে, ব্যবহারকারী-এজেন্ট স্নিফিং না করে।

ব্যবহারের ক্ষেত্রে

script-src সাথে ব্যবহারের জন্য নির্দিষ্ট URL গুলিকে Allowlist করুন

যেসব সাইট script-src ব্যবহার করে নির্দিষ্ট স্ক্রিপ্টগুলিকে allowlist করতে চায় তাদের কাছে বর্তমানে দুটি বিকল্প রয়েছে: subresource integrity (SRI) এর মাধ্যমে স্ক্রিপ্টের বিষয়বস্তুগুলিকে allowlist করুন, অথবা host-source ব্যবহার করে hostnames allowlist করুন। যেসব স্ক্রিপ্ট ঘন ঘন পরিবর্তিত হয় (উদাহরণস্বরূপ, analytics scripts) তাদের জন্য SRI প্রায়শই ব্যবহারিক নয়। strict-dynamic সেট করা থাকলে host-source নির্দিষ্ট করা উপেক্ষা করা হবে এবং এটি একটি ব্যাপক সুরক্ষা নয়, কারণ এতে URL প্যারামিটার অন্তর্ভুক্ত থাকে না। এই পরিবর্তনটি তাদের (পূর্ণ) URL এর একটি হ্যাশ ব্যবহার করে allowlisting স্ক্রিপ্টগুলিকে অনুমতি দেবে, যা strict-dynamic ব্যবহার করে ডায়নামিক স্ক্রিপ্ট এবং কনফিগারেশন উভয়কেই সমর্থন করবে।

eval বা eval-এর মতো ফাংশনের সাথে ব্যবহারের জন্য নির্দিষ্ট স্ক্রিপ্টগুলিকে অ্যালাউলিস্ট করুন

কিছু সাইটের জন্য eval বা eval-এর মতো ফাংশন ব্যবহার করা প্রয়োজন ( setTimeout , setInterval এবং setImmediate এ স্ট্রিং লিটারেল হিসেবে কোড পাস করা)। এই সাইটগুলির জন্য, তাদের কাছে উপলব্ধ একমাত্র CSP বিকল্প হল unsafe-eval , যা eval-এ সমস্ত কল সক্ষম করে। আমরা eval-এ নির্দিষ্ট ইনপুটগুলিকে allowlist করার জন্য একটি প্রক্রিয়া যুক্ত করছি। এই নতুন প্রক্রিয়াটি অতিরিক্ত বিস্তৃত unsafe-eval CSP প্রদান করতে বাধ্য না হয়ে সরাসরি স্ক্রিপ্টের বিষয়বস্তু হ্যাশ করে প্রয়োজনীয় নির্দিষ্ট স্ক্রিপ্টগুলিকে allowlist করার অনুমতি দেয়।

শুরু করুন

স্ক্রিপ্ট এবং eval হ্যাশিং সাপোর্ট ব্যবহার করে দেখতে, Chrome 141 থেকে 144 পর্যন্ত চলমান CSP script-src origin ট্রায়ালে URL এবং eval হ্যাশের সাথে যোগ দিন।

script-src এ হ্যাশ যোগ করুন

script-src CSP নির্দেশিকায় url-<hash-algorithm>-<script-url-hash> আকারে একটি মান যোগ করে URLগুলিকে allowlist করা হয়। এটি সেই URL-এ পরিবেশিত যেকোনো কন্টেন্ট, কন্টেন্ট নির্বিশেষে, কার্যকর করার অনুমতি দেবে। হ্যাশে শুধুমাত্র প্রাথমিক URL (পৃষ্ঠায় অন্তর্ভুক্ত URL) অন্তর্ভুক্ত করতে হবে, সেই URL-এ পুনঃনির্দেশিত কোনও URL অন্তর্ভুক্ত করতে হবে না। পরম এবং আপেক্ষিক উভয় URLই সমর্থিত।

উদাহরণস্বরূপ, নিম্নলিখিত CSP হেডারটি https://example.com/example.js- এ পরিবেশিত স্ক্রিপ্টটিকে allowlist করবে:

Content-Security-Policy: script-src 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=';

যেখানে 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=' হল ' https://example.com/example.js ' এর sha256 হ্যাশ।

eval অথবা new Function এর মাধ্যমে মূল্যায়ন করা স্ক্রিপ্টগুলিকে eval-<hash-algorithm>-<script-contents-hash> স্ক্রিপ্ট src-এ অন্তর্ভুক্ত করে allowlist করা যেতে পারে। উদাহরণস্বরূপ, নিম্নলিখিত CSP হেডার allowlist স্ট্রিং alert("hello world") eval() এ পাস করবে:

Content-Security-Policy: script-src 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=';

যেখানে 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=' হল alert("hello world") এর sha256 হ্যাশ।

বুটস্ট্র্যাপ গ্রহণে সহায়তা করার জন্য, যখন কোনও সাইট অরিজিন ট্রায়ালে অংশ নেয়, তখন URL এবং eval উভয়ের জন্য হ্যাশ DevTools কনসোলে প্রিন্ট করা হবে এবং CSP রিপোর্টে অন্তর্ভুক্ত করা হবে। এর অর্থ হল একটি কঠোর, কিন্তু report-only নীতি ব্যবহার করে অ্যালোলিস্টিংয়ের জন্য প্রয়োজনীয় সমস্ত হ্যাশ গণনা করা যেতে পারে।

পিছনের দিকে সামঞ্জস্য বজায় রাখুন

সমস্ত ব্রাউজারে সমর্থন যোগ করার আগে এই নীতিগুলি স্থাপনের অনুমতি দেওয়ার জন্য, হোস্ট-ভিত্তিক অ্যালোলিস্টের পরে URL হ্যাশগুলি তালিকাভুক্ত করা যেতে পারে। যে ব্রাউজারগুলি নতুন হ্যাশ প্রকারগুলি বোঝে তারা পূর্ববর্তী হোস্ট-ভিত্তিক অ্যালোলিস্টগুলিকে উপেক্ষা করবে, অন্যদিকে যে ব্রাউজারগুলি নতুন হ্যাশ প্রকারগুলি বোঝে না তারা এখনও হোস্ট-ভিত্তিক অ্যালোলিস্ট প্রয়োগ করবে, সাইটগুলিকে উভয় সেট করার অনুমতি দেবে, এটি সমর্থন করে এমন ব্রাউজারগুলিতে কঠোর নীতি ব্যবহার করে, যে ব্রাউজারগুলি এটি সমর্থন করে না তাদের ক্ষেত্রে ভাঙনের ঝুঁকি ছাড়াই, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

Content-Security-Policy: script-src 'https:' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='

আমরা strict-dynamic-urlও চালু করেছি, যা strict-dynamic এর সমতুল্য, যা শুধুমাত্র URL হ্যাশ সেট করা থাকলেই প্রযোজ্য। যেহেতু strict-dynamic এর ফলে হোস্ট-ভিত্তিক অ্যালাউলিস্ট উপেক্ষা করা হয়, তাই যে সাইট একটি নির্দিষ্ট হ্যাশ অ্যালাউলিস্ট করতে চায় এবং এতে স্ট্রিক ডায়নামিক প্রয়োগ করতে চায় তারা এই নীতি ব্যবহার করতে পারে:

Content-Security-Policy: https: 'strict-dynamic-url' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='

এই উদাহরণে, যেসব ব্রাউজার এখনও হ্যাশ সমর্থন করে না, তারা শুধুমাত্র https: . unsafe-eval প্রয়োগ করবে, একইভাবে eval হ্যাশ উপস্থিত থাকলে ব্রাউজারগুলিকে সমর্থন করে এমন ব্রাউজারগুলিও এটিকে উপেক্ষা করবে। উদাহরণস্বরূপ, নিম্নলিখিত নীতিটি unsafe-eval হিসাবে মূল্যায়ন করা হবে। এটি eval হ্যাশ সমর্থন করে না এমন ব্রাউজারগুলিতে সমস্ত eval() ব্যবহার সক্ষম করে, যখন eval হ্যাশ সমর্থন করে এমন ব্রাউজারগুলির মধ্যে শুধুমাত্র alert("hello world") এর eval() অনুমতি দেয়।

  Content-Security-Policy: script-src "unsafe-eval" "'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0='"

মতামত শেয়ার করুন

script-src এর এই এক্সটেনশনগুলি সম্পর্কে ডেভেলপারদের প্রতিক্রিয়া জানতে আমরা আগ্রহী। সমস্যা হিসেবে যেকোনো মন্তব্য github-এর explainer-এ পোস্ট করুন।