هنگامی که یک وب سرور به درخواست یک منبع پاسخ می دهد، سرور می تواند یک هدر Set-Cookie
را همراه با پاسخ خود قرار دهد. آن هدر به مرورگر شما می گوید که یک کوکی ذخیره کند. به عنوان مثال: Set-Cookie:cat=tabby
. کوکی ها چیست؟ نحوه عملکرد کوکی ها را توضیح می دهد.
علاوه بر ارائه نام و مقدار کوکی، Set-Cookie
میتواند شامل ویژگیهایی برای کنترل تنظیم بودن کوکیها و زمان انقضای آنها باشد. ویژگی های کوکی با نقطه ویرگول از هم جدا می شوند. به عنوان مثال:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
این مقاله مهمترین ویژگی های کوکی را توضیح می دهد:
استفاده از کوکی های HTTP ویژگی های کوکی را با جزئیات فنی بیشتری توضیح می دهد.
امن
👉 باید Secure
به طور پیش فرض برای همه کوکی ها قرار دهید.
اگر هدر Set-Cookie
شامل Secure
باشد، کوکی فقط با درخواستهای رمزگذاریشده که از پروتکل HTTPS استفاده میکنند شامل میشود: کوکی در درخواستهای HTTP گنجانده نمیشود. این می تواند به توقف حملات واسطه ای کمک کند، جایی که یک مهاجم مخفیانه در ارتباطات بین مرورگر و سرور مداخله می کند - برای انتقال اطلاعات و به طور بالقوه تغییر آن.
فقط HTTPO
👉 شما باید HTTPOnly
به طور پیش فرض برای همه کوکی ها قرار دهید. فقط در صورت نیاز به دسترسی جاوا اسکریپت حذف کنید.
اگر سرصفحه Set-Cookie
شامل HTTPOnly
باشد، با استفاده از document.cookie
نمی توان به کوکی دسترسی داشت. این به محافظت در برابر انواع خاصی از حملات که کوکی ها را هدف قرار می دهند کمک می کند.
همان سایت
👉 اگر مقداری تنظیم نشده باشد SameSite=Lax
پیشفرض است. SameSite=None
به کوکیهای بین سایتی اجازه نمیدهد، اما به این معنی است که کوکیها در جایی که محدودیتهای کوکی شخص ثالث وجود دارد مسدود میشوند.
درخواست منبعی از سایتی که با سایتی که بازدید می کنید متفاوت است، درخواست بین سایتی است. مجموعه کوکی در پاسخ به درخواست بین سایتی به عنوان کوکی شخص ثالث شناخته می شود. بیشتر بدانید: کوکی های شخص ثالث چیست؟
ویژگی SameSite
کنترل می کند که آیا کوکی شخص ثالث در یک درخواست گنجانده شود یا خیر. دارای سه مقدار ممکن است: Strict
، Lax
یا None
.
سختگیرانه
کوکی فقط در پاسخ به درخواست های صفحه ای که در سایت اصلی کوکی است ارسال می شود. به عنوان مثال: تصور کنید کاربری از cats.example
بازدید می کند و یک مجموعه کوکی با ویژگی SameSite=Strict
دارد. بعداً، کاربر در سایت دیگری است و پیوندی را به صفحه ای در cats.example
دنبال می کند. کوکی تنظیم شده در آن درخواست گنجانده نمی شود.
سست
این کار مانند Strict
عمل میکند، با این تفاوت که وقتی کاربر پیوندی را به سایت اصلی کوکی دنبال میکند، مرورگر کوکی را نیز شامل میشود. (در مثال Strict
قبلی، زمانی که کاربر پیوند cats.example
را دنبال میکند، کوکی گنجانده میشود .) اگر هیچ ویژگی SameSite
در سرصفحه Set-Cookie
وجود نداشته باشد، Lax
پیشفرض است.
هیچ کدام
هیچ محدودیتی وجود ندارد: کوکی با یک درخواست همراه میشود، خواه بین سایتی باشد یا نباشد. با SameSite=None
، کوکی باید ویژگی Secure
را نیز داشته باشد.
بیشتر بدانید: کوکی های SameSite توضیح داده شده است .
پارتیشن بندی شده
👉 اگر کوکی شخص ثالثی ایجاد میکنید، باید ویژگی Partitioned
را بهطور پیشفرض اضافه کنید، مگر اینکه صریحاً بدانید که باید در چندین جاسازی به اشتراک گذاشته شود.
این ویژگی به شما امکان میدهد کوکی را در فضای ذخیرهسازی پارتیشنبندی شده انتخاب کنید، با یک "شیشه کوکی" جداگانه برای هر سایت سطح بالا. کوکی توسط سایت سطح بالا و همچنین دامنه ای که آن را تنظیم می کند دو کلید می شود.
به عنوان مثال: تصور کنید که وبسایت A و وبسایت B هر دو دارای یک iframe از وبسایت C هستند. یک کوکی پارتیشنبندی شده توسط iframe در وبسایت A قابل دسترسی توسط iframe در وبسایت B نیست: کوکی AC از کوکی BC جدا است.
کوکیهای دارای ویژگی Partitioned
به عنوان CHIPS شناخته میشوند: کوکیهایی که حالت پارتیشن مستقل دارند.
کوکی های پارتیشن بندی شده باید دارای ویژگی Secure
باشند.
بیشتر بیاموزید: کوکی هایی که حالت تقسیم شده مستقل دارند .
منقضی و حداکثر سن
👉 ویژگی های Max-Age
و Expires
را کنار بگذارید مگر اینکه به یک کوکی برای ماندگاری بیشتر از جلسه فعلی نیاز داشته باشید. مرورگرها کوکیها را منقضی میکنند ، بنابراین هیچ فایدهای برای تعیین انقضای سالها در آینده وجود ندارد. در عوض، زمانی که کاربر مجدداً از سایت شما بازدید می کند، باید کوکی ها را به روز کنید.
می توانید تاریخ و زمان Expires
یا Max-Age
را در چند ثانیه تعیین کنید، پس از آن یک کوکی باید حذف شود و دیگر ارسال نشود. به عنوان مثال:
-
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
-
Set-Cookie:cat=tabby; Max-Age=86400
اگر ویژگی Max-Age
یا Expires
را مشخص نکنید، با پایان یافتن جلسه فعلی، یک کوکی حذف خواهد شد. این نوع کوکی گاهی اوقات به عنوان کوکی جلسه شناخته می شود.
دامنه
👉 جز در مواردی که نیاز به یک کوکی برای گنجاندن درخواستهای زیر دامنهها ندارید، ویژگی Domain
را وارد نکنید.
اگر هدر Set-Cookie
دارای ویژگی Domain
باشد، کوکی با درخواستهایی به دامنه مشخص شده و هر یک از زیر دامنههای آن اضافه میشود.
اگر سرصفحه Set-Cookie
دارای ویژگی Domain
نباشد، کوکی با درخواستهای زیر دامنهها اضافه نمیشود.
به عبارت دیگر گنجاندن ویژگی Domain
محدودیت های دامنه را کاهش می دهد .
به عنوان مثال، با پاسخی از وب سایت cats.example
:
-
Set-Cookie:cat=tabby
کوکی فقط با درخواستهایcats.example
همراه خواهد بود -
Set-Cookie:cat=tabby; Domain=cats.example
این کوکی با درخواستهایcats.example
و همچنین هرگونه درخواست برای منابع در زیر دامنههایی مانندfluffy.cats.example
یاuser.assets.cats.example
گنجانده میشود.
مسیر
👉 در صورت نیاز به تمام درخواستها به هر مسیری در سایت خود برای گنجاندن کوکی Path=/
را با یک کوکی اضافه کنید. برای حفاظت از امنیت به Path
تکیه نکنید .
اگر ویژگی Path
در سرصفحه پاسخ Set-Cookie
گنجانده شود، کوکی تنظیم شده فقط در درخواستهای URL (در سایتی که کوکی را تنظیم کرده است!) که با مقدار Path
مطابقت دارند، گنجانده میشود.
به عنوان مثال:
-
Set-Cookie:cat=tabby; Path=/articles
کوکی برای درخواست به هر مسیر URL که با/articles
شروع می شود شامل می شود:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
-
Set-Cookie:cat=tabby; Path=/
تمام درخواست ها به هر URL در سایت شامل کوکی می شود.
اگر سرصفحه پاسخ Set-Cookie
مقدار Path
نداشته باشد، کوکی فقط با درخواستهایی به همان فهرست اضافه میشود. برای مثال، تصور کنید که یک کوکی cat=tabby
در پاسخ به درخواست cats.example/images/tabby.jpg.
اگر Path
تنظیم نشده باشد، کوکی فقط با درخواستهایی برای فایلهای داخل فهرست راهنمای cats.example/images
گنجانده میشود.
دموها
- 1pc.glitch.me : نسخه نمایشی کوکی شخص اول
- 3pc.glitch.me : نسخه نمایشی کوکی شخص ثالث
ابزار
بیشتر بدانید
- دستور العمل های کوکی شخص اول
- کوکی ها چیست؟
- کوکی های شخص ثالث چیست؟
- درخواست و پاسخ HTTP
- ابزارهای کوکی
- دموهای کوکی
- استفاده از کوکی های HTTP
- کوکی های SameSite توضیح داده شده است
- OWASP: کوکی ها
هنگامی که یک وب سرور به درخواست یک منبع پاسخ می دهد، سرور می تواند یک هدر Set-Cookie
را همراه با پاسخ خود قرار دهد. آن هدر به مرورگر شما می گوید که یک کوکی ذخیره کند. به عنوان مثال: Set-Cookie:cat=tabby
. کوکی ها چیست؟ نحوه عملکرد کوکی ها را توضیح می دهد.
علاوه بر ارائه نام و مقدار کوکی، Set-Cookie
میتواند شامل ویژگیهایی برای کنترل تنظیم بودن کوکیها و زمان انقضای آنها باشد. ویژگی های کوکی با نقطه ویرگول از هم جدا می شوند. به عنوان مثال:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
این مقاله مهمترین ویژگی های کوکی را توضیح می دهد:
استفاده از کوکی های HTTP ویژگی های کوکی را با جزئیات فنی بیشتری توضیح می دهد.
امن
👉 باید Secure
به طور پیش فرض برای همه کوکی ها قرار دهید.
اگر هدر Set-Cookie
شامل Secure
باشد، کوکی فقط با درخواستهای رمزگذاریشده که از پروتکل HTTPS استفاده میکنند شامل میشود: کوکی در درخواستهای HTTP گنجانده نمیشود. این می تواند به توقف حملات واسطه ای کمک کند، جایی که یک مهاجم مخفیانه در ارتباطات بین مرورگر و سرور مداخله می کند - برای انتقال اطلاعات و به طور بالقوه تغییر آن.
فقط HTTPO
👉 شما باید HTTPOnly
به طور پیش فرض برای همه کوکی ها قرار دهید. فقط در صورت نیاز به دسترسی جاوا اسکریپت حذف کنید.
اگر سرصفحه Set-Cookie
شامل HTTPOnly
باشد، با استفاده از document.cookie
نمی توان به کوکی دسترسی داشت. این به محافظت در برابر انواع خاصی از حملات که کوکی ها را هدف قرار می دهند کمک می کند.
همان سایت
👉 اگر مقداری تنظیم نشده باشد SameSite=Lax
پیشفرض است. SameSite=None
به کوکیهای بین سایتی اجازه نمیدهد، اما به این معنی است که کوکیها در جایی که محدودیتهای کوکی شخص ثالث وجود دارد مسدود میشوند.
درخواست منبعی از سایتی که با سایتی که بازدید می کنید متفاوت است، درخواست بین سایتی است. مجموعه کوکی در پاسخ به درخواست بین سایتی به عنوان کوکی شخص ثالث شناخته می شود. بیشتر بدانید: کوکی های شخص ثالث چیست؟
ویژگی SameSite
کنترل می کند که آیا کوکی شخص ثالث در یک درخواست گنجانده شود یا خیر. دارای سه مقدار ممکن است: Strict
، Lax
یا None
.
سختگیرانه
کوکی فقط در پاسخ به درخواست های صفحه ای که در سایت اصلی کوکی است ارسال می شود. به عنوان مثال: تصور کنید کاربری از cats.example
بازدید می کند و یک مجموعه کوکی با ویژگی SameSite=Strict
دارد. بعداً، کاربر در سایت دیگری است و پیوندی را به صفحه ای در cats.example
دنبال می کند. کوکی تنظیم شده در آن درخواست گنجانده نمی شود.
سست
این کار مانند Strict
عمل میکند، با این تفاوت که وقتی کاربر پیوندی را به سایت اصلی کوکی دنبال میکند، مرورگر کوکی را نیز شامل میشود. (در مثال Strict
قبلی، زمانی که کاربر پیوند cats.example
را دنبال میکند، کوکی گنجانده میشود .) اگر هیچ ویژگی SameSite
در سرصفحه Set-Cookie
وجود نداشته باشد، Lax
پیشفرض است.
هیچ کدام
هیچ محدودیتی وجود ندارد: کوکی با یک درخواست همراه میشود، خواه بین سایتی باشد یا نباشد. با SameSite=None
، کوکی باید ویژگی Secure
را نیز داشته باشد.
بیشتر بدانید: کوکی های SameSite توضیح داده شده است .
پارتیشن بندی شده
👉 اگر کوکی شخص ثالثی ایجاد میکنید، باید ویژگی Partitioned
را بهطور پیشفرض اضافه کنید، مگر اینکه صریحاً بدانید که باید در چندین جاسازی به اشتراک گذاشته شود.
این ویژگی به شما امکان میدهد کوکی را در فضای ذخیرهسازی پارتیشنبندی شده انتخاب کنید، با یک "شیشه کوکی" جداگانه برای هر سایت سطح بالا. کوکی توسط سایت سطح بالا و همچنین دامنه ای که آن را تنظیم می کند دو کلید می شود.
به عنوان مثال: تصور کنید که وبسایت A و وبسایت B هر دو دارای یک iframe از وبسایت C هستند. یک کوکی پارتیشنبندی شده توسط iframe در وبسایت A قابل دسترسی توسط iframe در وبسایت B نیست: کوکی AC از کوکی BC جدا است.
کوکیهای دارای ویژگی Partitioned
به عنوان CHIPS شناخته میشوند: کوکیهایی که حالت پارتیشن مستقل دارند.
کوکی های پارتیشن بندی شده باید دارای ویژگی Secure
باشند.
بیشتر بیاموزید: کوکی هایی که حالت تقسیم شده مستقل دارند .
منقضی و حداکثر سن
👉 ویژگی های Max-Age
و Expires
را کنار بگذارید مگر اینکه به یک کوکی برای ماندگاری بیشتر از جلسه فعلی نیاز داشته باشید. مرورگرها کوکیها را منقضی میکنند ، بنابراین هیچ فایدهای برای تعیین انقضای سالها در آینده وجود ندارد. در عوض، زمانی که کاربر مجدداً از سایت شما بازدید می کند، باید کوکی ها را به روز کنید.
می توانید تاریخ و زمان Expires
یا Max-Age
را در چند ثانیه تعیین کنید، پس از آن یک کوکی باید حذف شود و دیگر ارسال نشود. به عنوان مثال:
-
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
-
Set-Cookie:cat=tabby; Max-Age=86400
اگر ویژگی Max-Age
یا Expires
را مشخص نکنید، با پایان یافتن جلسه فعلی، یک کوکی حذف خواهد شد. این نوع کوکی گاهی اوقات به عنوان کوکی جلسه شناخته می شود.
دامنه
👉 جز در مواردی که نیاز به یک کوکی برای گنجاندن درخواستهای زیر دامنهها ندارید، ویژگی Domain
را وارد نکنید.
اگر هدر Set-Cookie
دارای ویژگی Domain
باشد، کوکی با درخواستهایی به دامنه مشخص شده و هر یک از زیر دامنههای آن اضافه میشود.
اگر سرصفحه Set-Cookie
دارای ویژگی Domain
نباشد، کوکی با درخواستهای زیر دامنهها اضافه نمیشود.
به عبارت دیگر گنجاندن ویژگی Domain
محدودیت های دامنه را کاهش می دهد .
به عنوان مثال، با پاسخی از وب سایت cats.example
:
-
Set-Cookie:cat=tabby
کوکی فقط با درخواستهایcats.example
همراه خواهد بود -
Set-Cookie:cat=tabby; Domain=cats.example
این کوکی با درخواستهایcats.example
و همچنین هرگونه درخواست برای منابع در زیر دامنههایی مانندfluffy.cats.example
یاuser.assets.cats.example
گنجانده میشود.
مسیر
👉 در صورت نیاز به تمام درخواستها به هر مسیری در سایت خود برای گنجاندن کوکی Path=/
را با یک کوکی اضافه کنید. برای حفاظت از امنیت به Path
تکیه نکنید .
اگر ویژگی Path
در سرصفحه پاسخ Set-Cookie
گنجانده شود، کوکی تنظیم شده فقط در درخواستهای URL (در سایتی که کوکی را تنظیم کرده است!) که با مقدار Path
مطابقت دارند، گنجانده میشود.
به عنوان مثال:
-
Set-Cookie:cat=tabby; Path=/articles
کوکی برای درخواست به هر مسیر URL که با/articles
شروع می شود شامل می شود:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
-
Set-Cookie:cat=tabby; Path=/
تمام درخواست ها به هر URL در سایت شامل کوکی می شود.
اگر سرصفحه پاسخ Set-Cookie
مقدار Path
نداشته باشد، کوکی فقط با درخواستهایی به همان فهرست اضافه میشود. برای مثال، تصور کنید که یک کوکی cat=tabby
در پاسخ به درخواست cats.example/images/tabby.jpg.
اگر Path
تنظیم نشده باشد، کوکی فقط با درخواستهایی برای فایلهای داخل فهرست راهنمای cats.example/images
گنجانده میشود.
دموها
- 1pc.glitch.me : نسخه نمایشی کوکی شخص اول
- 3pc.glitch.me : نسخه نمایشی کوکی شخص ثالث