স্বাধীন বিভাজিত রাজ্য (CHIPS) থাকার কুকিজ

শীর্ষ-স্তরের সাইট প্রতি একটি পৃথক কুকি জার সহ বিকাশকারীদের "পার্টিশন করা" স্টোরেজে একটি কুকি বেছে নেওয়ার অনুমতি দিন৷

বাস্তবায়নের অবস্থা

ব্রাউজার সমর্থন

  • ক্রোম: 114।
  • প্রান্ত: 114।
  • ফায়ারফক্স প্রযুক্তি পূর্বরূপ: সমর্থিত।
  • সাফারি: সমর্থিত নয়।

উৎস

চিপস কি?

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

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

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

দুটি ভিন্ন ওয়েব সাইটের মধ্যে রান্না কীভাবে ভাগ করা যায় তা দেখানো চিত্র।
কুকি বিভাজন ছাড়া, একটি তৃতীয়-পক্ষ পরিষেবা একটি শীর্ষ-স্তরের সাইটে এম্বেড করা হলে একটি কুকি সেট করতে পারে এবং পরিষেবাটি অন্যান্য শীর্ষ-স্তরের সাইটগুলিতে এমবেড করা হলে একই কুকি অ্যাক্সেস করতে পারে৷

শীর্ষ-স্তরের প্রসঙ্গ দ্বারা বিভাজিত ক্রস-সাইট কুকিগুলিকে সমর্থন করার জন্য CHIPS একটি নতুন কুকি বৈশিষ্ট্য, Partitioned প্রবর্তন করে।

সেট-কুকি হেডার:

Set-Cookie: __Host-name=value; Secure; Path=/; SameSite=None; Partitioned;

জাভাস্ক্রিপ্ট:

document.cookie="__Host-name=value; Secure; Path=/; SameSite=None; Partitioned;"

একটি বিভাজিত তৃতীয়-পক্ষ কুকি শীর্ষ-স্তরের সাইটে সংযুক্ত থাকে যেখানে এটি প্রাথমিকভাবে সেট করা হয় এবং অন্য কোথাও থেকে অ্যাক্সেস করা যায় না। এইভাবে একটি তৃতীয় পক্ষের পরিষেবা দ্বারা সেট করা কুকিগুলি শুধুমাত্র শীর্ষ-স্তরের সাইটের একই এমবেডেড প্রেক্ষাপটের মধ্যে পড়তে পারে যেখানে সেগুলি প্রাথমিকভাবে সেট করা হয়েছিল৷

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

পার্টিশন করা কুকির সাহায্যে, যখন একজন ব্যবহারকারী সাইট A পরিদর্শন করে এবং সাইট C থেকে এম্বেড করা বিষয়বস্তু পার্টিশনড অ্যাট্রিবিউট সহ একটি কুকি সেট করে, তখন কুকি একটি পার্টিশন করা জারে সংরক্ষিত হয় যা শুধুমাত্র কুকিজের জন্য নির্ধারিত হয় যেটি সাইট A এ এমবেড করার সময় সাইট C সেট করে। ব্রাউজার যখন শীর্ষ-স্তরের সাইট A হয় শুধুমাত্র তখনই সেই কুকি পাঠাবে।

ব্যবহারকারী যখন একটি নতুন সাইট ভিজিট করেন, উদাহরণস্বরূপ সাইট B, একটি এম্বেড করা C ফ্রেম সেই কুকিটি পাবে না যা C সাইট A-তে এম্বেড করার সময় সেট করা হয়েছিল।

যদি একজন ব্যবহারকারী একটি শীর্ষ স্তরের ওয়েবসাইট হিসাবে সাইট C পরিদর্শন করেন, A এ এমবেড করার সময় C সেট করা পার্টিশন করা কুকিও সেই অনুরোধে পাঠানো হবে না।

চিত্র দেখায় যে কুকিজ ভাগ করা হয় না যখন একই তৃতীয় পক্ষ দুটি ভিন্ন ওয়েব সাইটে এমবেড করা হয়।
কুকি পার্টিশনিংয়ের সাথে, একটি তৃতীয় পক্ষের পরিষেবা যা একটি কুকি সেট করে যখন একটি সাইটে এম্বেড করা হয় তখন ব্যবহারকারীরা শীর্ষ-স্তরের সাইট হিসাবে পরিষেবাটি দেখার সময়ও একই কুকি অ্যাক্সেস করতে পারে না।

কেস ব্যবহার করুন

উদাহরণস্বরূপ, retail.example সাইটটি তার সাইটে একটি সমর্থন চ্যাট বক্স এম্বেড করার জন্য একটি তৃতীয়-পক্ষ পরিষেবা support.chat.example এর সাথে কাজ করতে চাইতে পারে৷ অনেক এম্বেডযোগ্য চ্যাট পরিষেবা আজ রাষ্ট্র বাঁচাতে কুকিজের উপর নির্ভর করে।

এম্বেড করা চ্যাট উইজেট সহ একটি ওয়েব সাইট দেখানো ডায়াগ্রাম
শীর্ষ-স্তরের সাইট retail.example এম্বেড করা একটি তৃতীয় পক্ষের পরিষেবা support.chat.example

একটি ক্রস-সাইট কুকি সেট করার ক্ষমতা ছাড়া, support.chat.example বিকল্প, প্রায়শই আরও জটিল, স্টেট স্টোর করার পদ্ধতি খুঁজে বের করতে হবে। বিকল্পভাবে, এটিকে শীর্ষ-স্তরের পৃষ্ঠায় এম্বেড করা দরকার যা ঝুঁকির পরিচয় দেয় কারণ এটি support.chat.example স্ক্রিপ্টকে retail.example-এ উন্নত বিশেষাধিকার পেতে দেয়, যেমন প্রমাণীকরণ কুকি অ্যাক্সেস করার ক্ষমতা।

CHIPS অ-বিভাগহীন কুকির সাথে যুক্ত ঝুঁকি ছাড়াই ক্রস-সাইট কুকিজ ব্যবহার চালিয়ে যাওয়ার জন্য একটি সহজ বিকল্প প্রদান করে।

CHIPS-এর উদাহরণ ব্যবহারের ক্ষেত্রে এমন কোনো পরিস্থিতি অন্তর্ভুক্ত যেখানে ক্রস-সাইট সাবরিসোর্সগুলির জন্য সেশন বা স্থায়ী অবস্থার কিছু ধারণা প্রয়োজন যা একটি একক শীর্ষ-স্তরের সাইটে ব্যবহারকারীর কার্যকলাপের জন্য স্কোপ করা হয়, যেমন:

  • তৃতীয় পক্ষের চ্যাট এম্বেড
  • তৃতীয় পক্ষের মানচিত্র এম্বেড
  • তৃতীয় পক্ষের পেমেন্ট এম্বেড
  • Subresource CDN লোড ব্যালেন্সিং
  • মাথাবিহীন CMS প্রদানকারী
  • অবিশ্বস্ত ব্যবহারকারী সামগ্রী (যেমন googleusercontent.com এবং githubusercontent.com) পরিবেশনের জন্য স্যান্ডবক্স ডোমেন
  • তৃতীয় পক্ষের CDN যেগুলি প্রথম-পক্ষের সাইটে প্রমাণীকরণের স্থিতি দ্বারা অ্যাক্সেস-নিয়ন্ত্রিত সামগ্রী পরিবেশন করতে কুকিজ ব্যবহার করে (উদাহরণস্বরূপ, তৃতীয় পক্ষের CDN-এ হোস্ট করা সোশ্যাল মিডিয়া সাইটে প্রোফাইল ছবি)
  • ফ্রন্ট-এন্ড ফ্রেমওয়ার্ক যা তাদের অনুরোধে কুকি ব্যবহার করে দূরবর্তী API-এর উপর নির্ভর করে
  • এমবেড করা বিজ্ঞাপন যেগুলির জন্য প্রকাশক প্রতি রাজ্যের সুযোগ প্রয়োজন (উদাহরণস্বরূপ, সেই ওয়েবসাইটের জন্য ব্যবহারকারীদের বিজ্ঞাপনের পছন্দগুলি ক্যাপচার করা)

কেন চিপস একটি অপ্ট-ইন পার্টিশনিং মডেল ব্যবহার করে

যেহেতু ব্রাউজারগুলি বিভাজনবিহীন তৃতীয় পক্ষের কুকিগুলিকে পর্যায়ক্রমে সরিয়ে দিচ্ছে, পার্টিশন করার জন্য কয়েকটি অন্যান্য পদ্ধতির চেষ্টা করা হয়েছে।

ফায়ারফক্স ঘোষণা করেছে যে তারা তাদের ETP স্ট্রিক্ট মোড এবং প্রাইভেট ব্রাউজিং মোডে ডিফল্টরূপে সমস্ত তৃতীয়-পক্ষ কুকিকে বিভাজন করছে , তাই সমস্ত ক্রস-সাইট কুকি শীর্ষ-স্তরের সাইট দ্বারা বিভক্ত করা হয়েছে। যাইহোক, তৃতীয় পক্ষের অপ্ট-ইন ছাড়া কুকি পার্টিশন করা অপ্রত্যাশিত বাগগুলির দিকে পরিচালিত করতে পারে, যেহেতু কিছু তৃতীয়-পক্ষ পরিষেবা সার্ভার তৈরি করেছে যা একটি অ-বিভাজন তৃতীয়-পক্ষ কুকির আশা করে৷

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

বিভাজিত কুকির বিদ্যমান বাস্তবায়ন থেকে CHIPS কে আলাদা করে তা হল তৃতীয় পক্ষের অপ্ট-ইন। একবার (বিভাজনবিহীন) তৃতীয় পক্ষের কুকি অপ্রচলিত হয়ে গেলে ক্রস-পার্টি অনুরোধে পাঠানোর জন্য কুকিগুলিকে অবশ্যই একটি নতুন বৈশিষ্ট্যের সাথে সেট করতে হবে।

যদিও তৃতীয় পক্ষের কুকি এখনও বিদ্যমান, Partitioned অ্যাট্রিবিউটটি আরও সীমাবদ্ধ, আরও নিরাপদ ধরনের কুকি আচরণের জন্য একটি অপ্ট-ইন প্রদান করে। থার্ড-পার্টি কুকিজ ছাড়াই ভবিষ্যতে একটি মসৃণ রূপান্তর করতে পরিষেবাগুলিকে সাহায্য করার জন্য চিপস একটি গুরুত্বপূর্ণ পদক্ষেপ।

আজ, কুকিগুলিকে সেই সাইটের হোস্টনাম বা ডোমেনে কী করা হয় যা তাদের সেট করে, অর্থাৎ তাদের হোস্ট কী

উদাহরণস্বরূপ, https://support.chat.example থেকে কুকিজের জন্য হোস্ট কী হল ("support.chat.example")

CHIPS-এর অধীনে, যে কুকিগুলি পার্টিশন করার বিকল্প বেছে নেয় তাদের হোস্ট কী এবং পার্টিশন কী -তে ডাবল-কি করা হবে।

একটি কুকির পার্টিশন কী হল শীর্ষ-স্তরের ইউআরএলের সাইট ( স্কিম এবং রেজিস্ট্রেবল ডোমেন ) যা ব্রাউজারটি কুকি সেট করার শেষ পয়েন্টে অনুরোধের শুরুতে ভিজিট করেছিল।

আগের উদাহরণে, যেখানে https://support.chat.example এম্বেড করা হয়েছে https://retail.example , সেখানে শীর্ষ-স্তরের URL হল https://retail.example

সেই ক্ষেত্রে পার্টিশন কী হল ("https", "retail.example")

অনুরূপভাবে, একটি অনুরোধের পার্টিশন কী হল শীর্ষ-স্তরের URL এর সাইট যা ব্রাউজার একটি অনুরোধের শুরুতে পরিদর্শন করে। ব্রাউজারগুলিকে অবশ্যই সেই কুকির মতো একই পার্টিশন কী সহ অনুরোধে Partitioned বৈশিষ্ট্য সহ একটি কুকি পাঠাতে হবে।

আগে উদাহরণে কুকি কী চিপসের আগে এবং পরে কেমন দেখায় তা এখানে।

সাইট A এবং এম্বেড করা সাইট C একটি বিভাজিত কুকি ভাগ করে। এমবেড করা না হলে, সাইট সি পার্টিশন করা কুকি অ্যাক্সেস করতে পারে না।
সাইট A এবং এম্বেড করা সাইট C একটি বিভাজিত কুকি ভাগ করে। এমবেড করা না হলে, সাইট সি পার্টিশন করা কুকি অ্যাক্সেস করতে পারে না।

চিপসের আগে

key=("support.chat.example")

চিপসের পরে

key={("support.chat.example"),("https", "retail.example")}

নিরাপত্তা নকশা

ভাল নিরাপত্তা অনুশীলন উত্সাহিত করার জন্য, CHIPS এর সাথে, কুকিগুলি শুধুমাত্র নিরাপদ প্রোটোকল দ্বারা সেট করা হয় এবং পাঠানো হয়।

  • পার্টিশন করা কুকিজ অবশ্যই Secure দিয়ে সেট করতে হবে।
  • বিভাজনকৃত কুকিগুলিকে হোস্টনামের সাথে আবদ্ধ করার জন্য সেট করার সময় __Host- উপসর্গ ব্যবহার করার পরামর্শ দেওয়া হয় (এবং নিবন্ধনযোগ্য ডোমেন নয়)।

উদাহরণ:

Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

চিপসের বিকল্প

স্টোরেজ অ্যাক্সেস এপিআই এবং সংশ্লিষ্ট রিলেটেড ওয়েবসাইট সেট (RWS) হল ওয়েব প্ল্যাটফর্ম মেকানিজম যা নির্দিষ্ট, ব্যবহারকারী-মুখী উদ্দেশ্যে সীমিত ক্রস-সাইট কুকি অ্যাক্সেস সক্ষম করে।

এগুলি চিপস পার্টিশনের বিকল্প যেখানে ক্রস-সাইট, বিভাজনবিহীন কুকগুলিতে অ্যাক্সেস প্রয়োজন।

এমন পরিস্থিতিতে স্টোরেজ অ্যাক্সেস API এবং সম্পর্কিত ওয়েবসাইট সেটগুলি বিবেচনা করুন যেখানে একাধিক সম্পর্কিত সাইটে এমবেড করা পরিষেবার জন্য আপনার একই কুকির প্রয়োজন হয়৷

CHIPS একটি পরিষেবাকে একাধিক সাইট জুড়ে একটি বিচ্ছিন্ন উপাদান হিসাবে কাজ করার ক্ষমতা প্রদান করে, যেখানে একই কুকি একাধিক সাইট জুড়ে উপলব্ধ হওয়ার প্রয়োজন নেই৷ যদি পরিষেবাটি একটি বিভাজিত কুকি সেট করে, তবে এর পার্টিশন কী হবে শীর্ষ-স্তরের সাইট এবং সেই কুকিটি পরিষেবাটি ব্যবহার করে অন্য সাইটগুলিতেও উপলব্ধ হবে না৷

সম্পর্কিত ওয়েবসাইট সেট ডিজাইন স্টোরেজ অ্যাক্সেস API এর উপর নির্ভর করে এবং CHIPS পার্টিশনের সাথে একীভূত হয় না। আপনার যদি একটি ব্যবহারের ক্ষেত্রে থাকে যা একটি RWS-এর মধ্যে সাইট জুড়ে একটি ভাগ করা কুকি পার্টিশনের উপর নির্ভর করে আপনি GitHub সমস্যাটির উদাহরণ এবং প্রতিক্রিয়া প্রদান করতে পারেন।

ডেমো

এই ডেমো আপনাকে পার্টিশন করা কুকিজ কিভাবে কাজ করে এবং আপনি কিভাবে DevTools-এ সেগুলি পরিদর্শন করতে পারেন তার মধ্যে নিয়ে যাবে।

সাইট A সাইট B থেকে একটি আইফ্রেম এম্বেড করে যা দুটি কুকি সেট করতে জাভাস্ক্রিপ্ট ব্যবহার করে: একটি বিভাজিত এবং বিভাজিত কুকি। সাইট B document.cookie ব্যবহার করে সেই অবস্থান থেকে অ্যাক্সেসযোগ্য সমস্ত কুকি প্রদর্শন করে৷

যখন তৃতীয় পক্ষের কুকি ব্লক করা হয়, সাইট B শুধুমাত্র ক্রস-সাইট প্রসঙ্গে Partitioned বৈশিষ্ট্য সহ কুকি সেট করতে এবং অ্যাক্সেস করতে সক্ষম হবে।

যখন তৃতীয় পক্ষের কুকির অনুমতি দেওয়া হয়, তখন সাইট B বিভাজনবিহীন কুকি সেট এবং অ্যাক্সেস করতে সক্ষম হয়।

সাইট A এবং সাইট B
বাম: তৃতীয় পক্ষের কুকি ব্লক করা হয়েছে। ডানদিকে: তৃতীয় পক্ষের কুকিজ অনুমোদিত।

পূর্বশর্ত

  1. Chrome 118 বা উচ্চতর।
  2. chrome://flags/#test-third-party-cookie-phaseout যান এবং এই সেটিংটি সক্ষম করুন

পার্টিশন করা কুকি পরীক্ষা করতে DevTools ব্যবহার করুন

  1. https://chips-site-a.glitch.me দেখুন।
  2. DevTools খুলতে Control+Shift+J (বা Mac-এ Command+Option+J ) টিপুন।
  3. অ্যাপ্লিকেশন ট্যাবে ক্লিক করুন।
  4. অ্যাপ্লিকেশন > স্টোরেজ > কুকিজে নেভিগেট করুন।
  5. https://chips-site-b.glitch.me ক্লিক করুন।

DevTools নির্বাচিত মূল থেকে সমস্ত কুকি প্রদর্শন করবে।

DevTools অ্যাপ্লিকেশন ট্যাবে সাইট B থেকে কুকিজ।

সাইট B শুধুমাত্র ক্রস-সাইট প্রসঙ্গে পার্টিশন করা কুকি সেট করতে পারে, পার্টিশন না করা কুকি ব্লক করা হবে:

  • আপনি শীর্ষ স্তরের সাইট https://chips-site-a.glitch.me এর পার্টিশন কী সহ __Host-partitioned-cookie দেখতে পাবেন।
__Host-partitioned-cookie-এর জন্য পার্টিশন কী।
  1. সাইট বি-তে যান ক্লিক করুন।
  2. DevTools-এ, অ্যাপ্লিকেশন > স্টোরেজ > কুকিজে নেভিগেট করুন।
  3. https://chips-site-b.glitch.me ক্লিক করুন।
সাইট বি
শীর্ষ-স্তরে, সাইট B সমস্ত কুকি দেখতে পারে - বিভাজিত এবং বিভাজিত নয়

এই পরিস্থিতিতে, যেহেতু আপনি শীর্ষ-স্তরের প্রেক্ষাপটে B সাইটে আছেন, এটি উভয় কুকি সেট এবং অ্যাক্সেস করতে পারে:

  • unpartitioned-cookie একটি খালি পার্টিশন কী আছে।
  • __Host-partitioned-cookie কুকিতে পার্টিশন কী আছে https://chips-site-b.glitch.me
একটি শীর্ষ-স্তরের সাইট হিসাবে B পরিদর্শন করার সময় DevTools অ্যাপ্লিকেশন ট্যাবে সাইট B থেকে কুকিজ। __Host-partitioned-cookie-এ পার্টিশন কী আছে https://chips-site-b.glitch.me।

আপনি যদি সাইট A-তে ফিরে যান, unpartitioned-cookie এখন ব্রাউজারে সংরক্ষণ করা হয়, তবে এটি সাইট A থেকে অ্যাক্সেসযোগ্য হবে না।

  1. সাইট A এ যান ক্লিক করুন।
  2. নেটওয়ার্ক ট্যাবে ক্লিক করুন।
  3. https://chips-site-b.glitch.me ক্লিক করুন।
  4. কুকিজ ট্যাবে ক্লিক করুন।

সাইট A-তে থাকাকালীন, আপনি শীর্ষ স্তরের সাইট https://chips-site-a.glitch.me এর পার্টিশন কী সহ __Host-partitioned-cookie দেখতে পাবেন।

নেটওয়ার্ক ট্যাব সাইট B iframe থেকে কুকিজ দেখায় যা সাইট A এ এমবেড করার সময় অ্যাক্সেসযোগ্য।

আপনি যদি ফিল্টার করা কুকিজ অনুরোধ চেক করেন তাহলে DevTools দেখাবে যে পার্টিশন না করা কুকি ব্লক করা হয়েছে, একটি টুলটিপ সহ হলুদ রঙে হাইলাইট করা হয়েছে: "এই কুকিটি ব্যবহারকারীর পছন্দের কারণে ব্লক করা হয়েছে"

নেটওয়ার্ক ট্যাব সাইট B iframe থেকে ব্লক করা কুকি দেখাচ্ছে।

অ্যাপ্লিকেশন > স্টোরেজ > কুকিতে https://chips-site-b.glitch.me ক্লিক করলে দেখাবে:

  • খালি পার্টিশন কী সহ unpartitioned-cookie
  • __Host-partitioned-cookie কুকি পার্টিশন কী সহ https://chips-site-a.glitch.me
DevTools অ্যাপ্লিকেশন ট্যাবে সাইট B থেকে কুকিজ। __Host-partitioned-cookie কুকিতে পার্টিশন কী আছে https://chips-site-a.glitch.meunpartitioned-cookie দেখানো হয়েছে, কিন্তু সাইট B iframe-এ এটি অ্যাক্সেসযোগ্য নয় যখন এটি সাইট A এ এম্বেড করা থাকে।

কুকিজ সাফ করুন

ডেমো রিসেট করতে, সাইটের জন্য সমস্ত কুকি সাফ করুন:

  • DevTools খুলতে Control+Shift+J (বা Mac-এ Command+Option+J ) টিপুন।
  • অ্যাপ্লিকেশন ট্যাবে ক্লিক করুন।
  • অ্যাপ্লিকেশন > স্টোরেজ > কুকিজে নেভিগেট করুন।
  • https://chips-site-b.glitch.me এ রাইট-ক্লিক করুন।
  • সাফ ক্লিক করুন.

সম্পদ