کوکی تکهای از دادههای ذخیره شده در مرورگر است که برای تداوم وضعیت و سایر اطلاعاتی که یک وبسایت برای اجرای ویژگیهای خود به آن نیاز دارد، استفاده میشود.
کوکی فایل کوچکی است که وبسایتها در دستگاه کاربران خود ذخیره میکنند، اطلاعاتی که ذخیره میکند بین مرورگر و وبسایت رفت و آمد میکند.
هر کوکی یک جفت کلید-مقدار همراه با تعدادی ویژگی است که زمان و مکان استفاده از کوکی را کنترل می کند. این ویژگی ها برای تنظیم مواردی مانند تاریخ انقضا یا نشان دادن اینکه کوکی باید فقط از طریق HTTPS ارسال شود استفاده می شود. میتوانید یک کوکی را در یک هدر HTTP یا از طریق رابط جاوا اسکریپت تنظیم کنید.
کوکی ها یکی از روش های موجود برای افزودن حالت پایدار به وب سایت ها هستند. در طول سالها، قابلیتهای آنها رشد کرده و تکامل یافته است، اما پلتفرم را با برخی مسائل قدیمی مشکلساز باقی گذاشت. برای رفع این مشکل، مرورگرها (از جمله کروم، فایرفاکس و اج) رفتار خود را برای اعمال پیشفرضهای حفظ حریم خصوصی تغییر میدهند.
فرض کنید وبلاگی دارید که در آن میخواهید تبلیغی با عنوان «چه خبر» را برای کاربران خود نمایش دهید. کاربران میتوانند تبلیغ را رد کنند و پس از مدتی دیگر آن را نخواهند دید. میتوانید آن اولویت را در یک کوکی ذخیره کنید، آن را روی یک ماه منقضی کنید (2,600,000 ثانیه) و فقط آن را از طریق HTTPS ارسال کنید. آن هدر به شکل زیر خواهد بود:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
وقتی خواننده شما صفحهای را مشاهده میکند که این الزامات را برآورده میکند - آنها در یک اتصال امن هستند و کوکی کمتر از یک ماه از عمرش گذشته است - مرورگر آنها این هدر را در درخواست خود ارسال میکند:
Cookie: promo_shown=1
همچنین میتوانید کوکیهای موجود در آن سایت را در جاوا اسکریپت با استفاده از document.cookie
اضافه کنید و بخوانید. تخصیص به document.cookie
باعث ایجاد یا لغو یک کوکی با آن کلید می شود. به عنوان مثال، می توانید موارد زیر را در کنسول جاوا اسکریپت مرورگر خود امتحان کنید:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
خواندن document.cookie
تمام کوکیهای قابل دسترسی در شرایط کنونی را با هر کوکی با یک نقطه ویرگول از هم جدا میکند:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
اگر این کار را در منتخبی از سایتهای محبوب امتحان کنید، متوجه خواهید شد که اکثر آنها به طور قابل توجهی بیش از سه کوکی تنظیم میکنند. در بیشتر موارد، آن کوکیها در هر درخواست به آن دامنه ارسال میشوند که پیامدهای زیادی دارد. پهنای باند آپلود اغلب برای کاربران شما محدودتر از دانلود است، به طوری که سربار همه درخواست های خروجی باعث می شود زمان شما به بایت اول تاخیر بیفتد. در تعداد و اندازه کوکی هایی که تنظیم می کنید محافظه کار باشید. از ویژگی Max-Age
استفاده کنید تا اطمینان حاصل شود که کوکیها بیشتر از زمان مورد نیاز باقی نمیمانند.
اگر به همان مجموعهای از سایتهایی که قبلاً نگاه میکردید برگردید، احتمالاً متوجه شدهاید که کوکیهایی برای دامنههای مختلف وجود دارد، نه فقط برای دامنههایی که در حال حاضر از آن بازدید میکردید. کوکی هایی که با دامنه سایت فعلی مطابقت دارند، یعنی آنچه در نوار آدرس مرورگر نمایش داده می شود، کوکی های شخص اول نامیده می شوند. به طور مشابه، کوکیهای دامنههایی غیر از سایت فعلی، کوکیهای شخص ثالث نامیده میشوند. این یک برچسب مطلق نیست، بلکه نسبت به زمینه کاربر است. بسته به اینکه کاربر در آن زمان در کدام سایت است، کوکی مشابه می تواند شخص اول یا شخص ثالث باشد.
در ادامه مثال بالا، فرض کنید یکی از پستهای وبلاگ شما تصویری از یک گربه فوقالعاده دارد و در /blog/img/amazing-cat.png
میزبانی شده است. از آنجایی که این تصویر بسیار شگفت انگیز است، شخص دیگری مستقیماً از آن در سایت خود استفاده می کند. اگر بازدیدکنندهای به وبلاگ شما رفته است و کوکی promo_shown
را دارد، پس از مشاهده amazing-cat.png
در سایت شخص دیگر، آن کوکی در آن درخواست برای تصویر ارسال میشود . این به خصوص برای هیچ کس مفید نیست زیرا promo_shown
برای هیچ چیز در سایت این شخص دیگر استفاده نمی شود، فقط سربار را به درخواست اضافه می کند.
اگر این یک اثر ناخواسته است، چرا می خواهید این کار را انجام دهید؟ این مکانیزم است که به سایتها اجازه میدهد تا زمانی که در یک زمینه شخص ثالث استفاده میشوند وضعیت خود را حفظ کنند. به عنوان مثال، اگر یک ویدیوی YouTube را در سایت خود جاسازی کنید، بازدیدکنندگان گزینه «تماشا در فرصتی دیگر» را در پخش کننده خواهند دید. اگر بازدیدکننده شما قبلاً وارد YouTube شده باشد، آن جلسه توسط یک کوکی شخص ثالث در پخش کننده تعبیه شده در دسترس قرار می گیرد - به این معنی که دکمه «تماشا در فرصتی دیگر» به جای اینکه از آنها بخواهد وارد سیستم شوند یا به سیستم وارد شوند، فقط ویدیو را یکجا ذخیره می کند. باید آنها را از صفحه خود دور کنید و به YouTube برگردید.
یکی از ویژگی های فرهنگی وب این است که به طور پیش فرض باز است. این بخشی از چیزی است که این امکان را برای افراد زیادی فراهم کرده است تا محتوا و برنامه های خود را در آنجا ایجاد کنند. با این حال، این همچنین تعدادی از نگرانی های امنیتی و حفظ حریم خصوصی را به همراه داشته است. حملات جعل درخواست بین سایتی (CSRF) بر این واقعیت متکی است که کوکی ها به هر درخواستی به یک منبع معین متصل می شوند، صرف نظر از اینکه چه کسی درخواست را آغاز می کند. برای مثال، اگر از evil.example
بازدید کنید، میتواند درخواستهایی را به your-blog.example
راهاندازی کند و مرورگر شما با خوشحالی کوکیهای مرتبط را پیوست میکند. اگر وبلاگ شما مراقب نحوه تأیید این درخواستها نباشد، evil.example
میتواند اقداماتی مانند حذف پستها یا افزودن محتوای خود را انجام دهد.
کاربران همچنین از نحوه استفاده از کوکی ها برای ردیابی فعالیت خود در چندین سایت آگاه تر می شوند. با این حال تاکنون راهی برای بیان صریح قصد خود از کوکی وجود نداشته است. کوکی promo_shown
شما فقط باید در زمینه شخص اول ارسال شود، در حالی که کوکی جلسه برای ویجتی که قرار است در سایتهای دیگر تعبیه شود، عمداً برای ارائه وضعیت ورود به سیستم در زمینه شخص ثالث وجود دارد.
با تنظیم ویژگی SameSite مناسب میتوانید به صراحت قصد خود را با یک کوکی بیان کنید.
برای شناسایی کوکیهای شخص اول و تنظیم ویژگیهای مناسب، دستور العملهای کوکی شخص اول را بررسی کنید.