SameSite কুকি সম্পর্কে ব্যাখ্যা করা হয়েছে

Browser Support

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

প্রতিটি কুকিতে একটি কী-ভ্যালু পেয়ারের সাথে বেশ কিছু অ্যাট্রিবিউট থাকে যা কুকিটি কখন এবং কোথায় ব্যবহার করা হবে তা নিয়ন্ত্রণ করে।

SameSite অ্যাট্রিবিউট (RFC6265bis-এ সংজ্ঞায়িত) ব্যবহার করে আপনি ঘোষণা করতে পারবেন যে আপনার কুকি ফার্স্ট-পার্টি বা একই-সাইট প্রসঙ্গে সীমাবদ্ধ কিনা। এখানে 'সাইট' বলতে ঠিক কী বোঝানো হচ্ছে তা বুঝতে পারলে সুবিধা হবে। সাইট হল ডোমেন সাফিক্স এবং ঠিক তার আগের ডোমেনের অংশের সমন্বয়। যেমন, www.web.dev ডোমেন হল web.dev সাইটের অংশ।

মূল শব্দ: ব্যবহারকারী www.web.dev-এ থেকে static.web.dev-এর কোনও ছবি দেখার অনুরোধ করলে, সেটি একই-সাইট অনুরোধ হিসেবে গণ্য করা হয়।

সর্বজনীন সাফিক্স তালিকা থেকে বোঝা যায় যে কোন কোন পৃষ্ঠা একই সাইটে আছে বলে ধরা হবে। এটি শুধু .com-এর মতো টপ-লেভেল ডোমেনের উপর নির্ভর করে না, বরং github.io-এর মতো পরিষেবাও অন্তর্ভুক্ত করতে পারে। এটি your-project.github.io এবং my-project.github.io-কে আলাদা সাইট হিসেবে গণনা করার সুবিধা দেয়।

মূল শব্দ: ব্যবহারকারী your-project.github.io-এ থেকে my-project.github.io-এর কাছে কোনও ছবির অনুরোধ করলে, সেটি হল ক্রস-সাইট অনুরোধ।

কুকির ব্যবহার ঘোষণা করতে SameSite অ্যাট্রিবিউট ব্যবহার করুন

কুকির SameSite অ্যাট্রিবিউট এই আচরণ নিয়ন্ত্রণ করার তিনটি আলাদা উপায় প্রদান করে। আপনি অ্যাট্রিবিউট নির্দিষ্ট না করার বিকল্প বেছে নিতে পারেন অথবা একই সাইটের অনুরোধে কুকি সীমাবদ্ধ করতে Strict বা Lax ব্যবহার করতে পারেন।

আপনি SameSite-কে Strict হিসেবে সেট করলে, আপনার কুকি শুধুমাত্র ফার্স্ট-পার্টি প্রসঙ্গে পাঠানো যেতে পারে; অর্থাৎ, কুকির জন্য সাইটটি ব্রাউজারের অ্যাড্রেস বারে দেখানো সাইটের সাথে মিললে। সুতরাং, promo_shown কুকি যদি এইভাবে সেট করা হয়:

Set-Cookie: promo_shown=1; SameSite=Strict

ব্যবহারকারী আপনার সাইটে থাকলে, প্রত্যাশা অনুযায়ী অনুরোধের সাথে কুকি পাঠানো হয়। তবে, ব্যবহারকারী অন্য কোনও সাইট থেকে আপনার সাইটের লিঙ্কে ক্লিক করলে, প্রাথমিক অনুরোধে কুকি পাঠানো হয় না। এটি এমন কুকির জন্য ভালো যা প্রাথমিক নেভিগেশনের পরে থাকা ফিচারের সাথে সম্পর্কিত, যেমন পাসওয়ার্ড পরিবর্তন করা বা কেনাকাটা করা, তবে promo_shown-এর মতো কুকির জন্য এটি খুব বেশি সীমাবদ্ধতা আরোপ করে। আপনার পাঠক সাইটের লিঙ্কে গেলে, তিনি চান যে কুকি পাঠানো হোক যাতে তার পছন্দ প্রয়োগ করা যায়।

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

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

Lax-এ কুকি সেট করা থাকলে, নিম্নলিখিতভাবে তা কাজ করে:

Set-Cookie: promo_shown=1; SameSite=Lax

ব্রাউজার যখন অন্য ব্যক্তির ব্লগের জন্য amazing-cat.png-এর অনুরোধ করে, তখন আপনার সাইট কুকি পাঠায় না। তবে, পাঠক আপনার সাইটে cat.html-এর লিঙ্ক অনুসরণ করলে, সেই অনুরোধে কুকি অন্তর্ভুক্ত থাকে।

আমরা এইভাবে SameSite ব্যবহার করার সাজেশন দিই, ওয়েবসাইট ডিসপ্লেকে প্রভাবিত করে এমন কুকি Lax-এ সেট করুন এবং ব্যবহারকারীর অ্যাকশন সম্পর্কিত কুকি Strict-এ সেট করুন।

এছাড়াও, আপনি SameSite-কে None-এ সেট করতে পারেন যাতে বোঝা যায় যে আপনি সব প্রসঙ্গে কুকি পাঠাতে চান। আপনি যদি এমন কোনও পরিষেবা প্রদান করেন যা অন্যান্য সাইট ব্যবহার করে, যেমন উইজেট, এম্বেড করা কন্টেন্ট, অ্যাফিলিয়েট প্রোগ্রাম, বিজ্ঞাপন বা একাধিক সাইট জুড়ে সাইন-ইন, তাহলে আপনার উদ্দেশ্য স্পষ্ট করতে None ব্যবহার করুন।

কনটেক্সটের ভিত্তিতে তিনটি কুকি None, Lax বা Strict হিসেবে লেবেল করা আছে
কুকির প্রসঙ্গ স্পষ্টভাবে None, Lax বা Strict হিসেবে চিহ্নিত করুন।

SameSite ছাড়া ডিফল্ট অ্যাকশনে পরিবর্তন

Browser Support

  • Chrome: 80.
  • Edge: 86.
  • Firefox: behind a flag.
  • Safari: not supported.

SameSite অ্যাট্রিবিউট ব্যাপকভাবে কাজ করে, তবে এটি ব্যাপকভাবে গ্রহণ করা হয়নি। অতীতে, SameSite ছাড়া কুকি সেট করলে, ডিফল্ট হিসেবে সেগুলি সব প্রসঙ্গে পাঠানো হত, যার ফলে ব্যবহারকারীরা CSRF এবং অনিচ্ছাকৃত তথ্য ফাঁসের শিকার হতেন। ডেভেলপারদের তাদের উদ্দেশ্য জানাতে এবং ব্যবহারকারীদের আরও নিরাপদ অভিজ্ঞতা প্রদান করতে উৎসাহিত করার জন্য, IETF প্রস্তাব, ধীরে ধীরে আরও ভালো কুকি দুটি মূল পরিবর্তন করে:

  • SameSite অ্যাট্রিবিউট ছাড়া কুকিকে SameSite=Lax হিসেবে বিবেচনা করা হয়।
  • SameSite=None সহ কুকিতে Secure উল্লেখ করতে হবে, যার অর্থ হল সেগুলির জন্য একটি সুরক্ষিত প্রসঙ্গ প্রয়োজন।

এই দুটি পরিবর্তনই সেইসব ব্রাউজারের সাথে ব্যাকওয়ার্ড-কম্প্যাটিবল যেগুলি SameSite অ্যাট্রিবিউটের আগের ভার্সন সঠিকভাবে প্রয়োগ করেছে, সেইসাথে সেইসব ব্রাউজারের সাথেও ব্যাকওয়ার্ড-কম্প্যাটিবল যেগুলি আগের SameSite ভার্সন সাপোর্ট করে না। কুকির আচরণ ও ব্যবহারের উদ্দেশ্য স্পষ্ট করে ব্রাউজারের ডিফল্ট আচরণের উপর ডেভেলপারদের নির্ভরতা কমানোর জন্য এগুলি তৈরি করা হয়েছে। SameSite=None শনাক্ত করতে পারে না এমন যেকোনও ক্লায়েন্টকে এটি উপেক্ষা করতে হবে।

ডিফল্ট হিসেবে SameSite=Lax

আপনি যদি কোনও কুকির SameSite অ্যাট্রিবিউট উল্লেখ না করে সেটি পাঠান, তাহলে ব্রাউজার সেই কুকিকে এমনভাবে বিবেচনা করে যেন সেটি SameSite=Lax-এ সেট করা হয়েছে। আমরা এখনও সাজেস্ট করি যে ব্রাউজার জুড়ে আপনার ব্যবহারকারীর অভিজ্ঞতা আরও সামঞ্জস্যপূর্ণ করতে স্পষ্টভাবে SameSite=Lax সেট করুন।

SameSite=None অবশ্যই সুরক্ষিত হতে হবে

SameSite=None ব্যবহার করে ক্রস-সাইট কুকি তৈরি করার সময়, ব্রাউজার যাতে সেগুলি গ্রহণ করে তার জন্য আপনাকে সেগুলি Secure-এ সেট করতে হবে:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

আপনি Chrome 76-এ এই আচরণ টেস্ট করতে পারবেন about://flags/#cookies-without-same-site-must-be-secure চালু করে এবং Firefox 69-এ network.cookie.sameSite.noneRequiresSecure সেট করে about:config-এ।

এছাড়াও, আমরা যত তাড়াতাড়ি সম্ভব আগে থেকে থাকা কুকি Secure-এ আপডেট করার সাজেশন দিই। আপনার সাইটে থার্ড-পার্টি কন্টেন্ট প্রদান করে এমন পরিষেবার উপর আপনি নির্ভর করলে, আপনার পরিষেবা প্রদানকারী তার কুকি আপডেট করেছে কিনা তা নিশ্চিত করুন এবং আপনার সাইটে কোনও স্নিপেট বা নির্ভরতা আপডেট করুন যাতে এটি নতুন আচরণ ব্যবহার করে তা নিশ্চিত করা যায়।

SameSite=None-এ হওয়া এইসব পরিবর্তন এবং ব্রাউজারের আচরণে পার্থক্য সফলভাবে ম্যানেজ করার জন্য আপনার কুকি আপডেট করার ব্যাপারে আরও জানতে, ফলো-আপ নিবন্ধ, SameSite কুকি রেসিপি দেখুন।

লিলি চেন, মাল্টে উবল, মাইক ওয়েস্ট, রব ডডসন, টম স্টেইনার ও বিবেক শেখরের অবদান ও মতামতের জন্য তাদের ধন্যবাদ।