اینترنت و شبکه

کوکی چیست

کوکی یک تکه متن کوچک است که یک سایت در مرورگر شما می گذارد و مرورگر همان را در هر درخواست بعدی به همان سایت پس می فرستد؛ دقیقا به همین دلیل است که بعد از یک بار وارد شدن، وارد می مانید. کوکی برنامه نیست و روی دستگاه شما اجرا نمی شود؛ فقط یک برچسب است، و تمام بحث بر سر این است که چه کسی اجازه دارد آن برچسب را بخواند.

  • درس ۱۲ از ۱۲
  • مقدماتی
  • رایگان، بدون ثبت نام

چهار کوکی که یک صفحه معمولی می تواند داشته باشد

شماره ها به نقش هر کوکی اشاره می کنند، نه به جای دیدنشان؛ کوکی روی صفحه دیده نمی شود.

  • ۱

    کوکی نشست و ورود

    خودی و ضروری. بدون آن با هر کلیک دوباره باید وارد شوید و در بنر رضایت هم جایی ندارد.

  • ۲

    سبد خرید و تنظیم ها

    خودی. زبان انتخابی و پیامی که بسته اید هم همین جا می نشینند و با پاک کردن کوکی ها می روند.

  • ۳

    کوکی آمار

    معمولا خودی است ولی با جاوااسکریپت ساخته می شود، نه با سرآیند سرور. خودی بودن به معنای بی ضرر بودن نیست.

  • ۴

    کوکی شخص ثالث

    از دامنه یک ویدیوی جاسازی شده یا یک تبلیغ. همین است که ردیابی بین سایت ها را ممکن می کند.

یک صفحه می تواند هیچ کدام از این ها را نداشته باشد. صفحه اول همین سایت برای یک بازدیدکننده ناشناس هیچ کوکی ای از سمت سرور نمی گذارد.

آخرین بررسی: فکت ها و نام ابزارهای این درس در همین تاریخ با منابعشان بازبینی شده اند.

کوکی دقیقا چیست و چرا اصلا لازم شد؟

پروتکلی که وب روی آن ساخته شده حافظه ندارد. هر درخواست برای سرور یک غریبه است و وقتی جوابش را داد، شما را فراموش می کند. اگر چیزی این وسط نبود، هر بار که روی یک لینک داخل سایت کلیک می کردید دوباره باید وارد می شدید.

کوکی همان چیز است. سرور در جواب یک درخواست یک سرآیند Set-Cookie می فرستد و مرورگر آن متن را ذخیره می کند؛ از آن به بعد مرورگر همان متن را در هر درخواست به همان دامنه پس می فرستد. سرور آن را می خواند و می فهمد شما همان کسی هستید که ده ثانیه پیش وارد شده بود. قاعده هایش در RFC 6265 نوشته شده و از سال ۱۹۹۰ میلادی تا حالا تقریبا همان است.

سه کاربرد اصلی دارد و اولی از بقیه مهم تر است. نگه داشتن نشست، یعنی همان لاگین ماندن. نگه داشتن حالت، مثل سبد خرید و زبانی که انتخاب کرده اید. و شمردن و ردیابی، که همان چیزی است که بحث برانگیز شده.

یک بدفهمی رایج را همین جا تمام کنیم: کوکی ویروس نیست و نمی تواند باشد. کوکی متن است و متن اجرا نمی شود. سایت با کوکی نمی تواند فایل های شما را بخواند یا به دوربینتان دسترسی پیدا کند. خطر کوکی از جای دیگری می آید: اگر کسی کوکی نشست شما را بدزدد، بدون دانستن رمز عبورتان می تواند به جای شما وارد شود، و برای همین است که سایت ها بعد از تغییر رمز همه نشست ها را باطل می کنند.

کوکی شیشه ای با برچسب سفید که میان قاب مرورگر قرمز و جعبه سرور آبی رفت و آمد می کند

کوکی خودی و کوکی شخص ثالث چه فرقی دارند؟

تفاوت در فنی بودن نیست، در مالکیت است. کوکی خودی را همان دامنه ای می گذارد که در نوار آدرس نوشته شده. کوکی شخص ثالث را دامنه دیگری می گذارد که تکه ای از آن صفحه را می آورد: یک ویدیوی جاسازی شده، یک دکمه شبکه اجتماعی، یک تبلیغ، یا یک اسکریپت آمار.

و همین یک تفاوت است که ردیابی بین سایت ها را ممکن می کند. فرض کنید یک شرکت تبلیغاتی روی هزار سایت مختلف اسکریپتی دارد. هر بار که شما یکی از آن هزار سایت را باز می کنید، مرورگر شما همان کوکی آن شرکت را پس می فرستد، چون آن کوکی مال دامنه خود آن شرکت است و ربطی به سایتی که باز کرده اید ندارد. نتیجه اش این است که آن شرکت بدون اینکه شما هیچ وقت با آن کار کرده باشید، فهرستی از سایت هایی که سر می زنید دارد.

مرورگرها سال هاست دارند این را محدود می کنند و امروز رفتارشان یکسان نیست. فایرفاکس با نامی که خودش رویش گذاشته کوکی هر سایت را در ظرف جدای همان سایت نگه می دارد، و سافاری هم گزینه جلوگیری از ردیابی بین سایت ها را دارد. این وضعیت سال به سال عوض شده و ممکن است باز هم عوض شود؛ به جای باور کردن یک جمله در یک مقاله، صفحه تنظیمات حریم خصوصی مرورگر خودتان را باز کنید و ببینید همین حالا چه چیزی روشن است.

یک تفکیک که لازم است روشن باشد: کوکی نشست سایتی که با آن کار می کنید و کوکی یک شبکه تبلیغاتی از نظر فنی یک چیز اند و از نظر معنا دو چیز کاملا متفاوت. بحث حریم خصوصی درباره دومی است، نه اولی، و بستن کامل کوکی ها هر دو را با هم می بندد.

یک فناوری، دو مالک، دو معنی

کوکی خودی

  • همان دامنه ای که در نوار آدرس نوشته شده آن را گذاشته
  • فقط به همان سایت پس فرستاده می شود
  • ورود، سبد خرید، زبان، و آمار همان سایت
  • مرورگرها معمولا محدودش نمی کنند
  • بستنش یعنی سایت از کار افتادن، نه حریم خصوصی بیشتر

کوکی شخص ثالث

  • دامنه دیگری آن را گذاشته که تکه ای از صفحه را می آورد
  • در هر سایتی که همان تکه را دارد پس فرستاده می شود
  • تبلیغ، دکمه شبکه اجتماعی، ویدیوی جاسازی شده
  • مرورگرها سال هاست محدودش می کنند و رفتارشان یکسان نیست
  • بستنش معمولا چیزی را خراب نمی کند

مرز بین این دو همیشه تمیز نیست. یک سرویس بیرونی می تواند از دامنه فرعی خود سایت اجرا شود و از نظر مرورگر خودی حساب شود، در حالی که داده را برای همان شرکت بیرونی می فرستد.

یک کوکی از سمت سرور چه چیزی را عوض می کند؟

این را با سایت خودمان نشان می دهیم، چون مثال واقعی از توضیح انتزاعی بهتر است. اگر همین حالا صفحه اول rgb.ir را به عنوان یک بازدیدکننده معمولی باز کنید، سایت هیچ کوکی ای به شما نمی دهد: در جواب سرور حتی یک سرآیند Set-Cookie هم نیست. لازم هم ندارد، چون یک بازدیدکننده ناشناس چیزی برای به یاد سپردن ندارد.

ولی همان کوکی نداشتن است که تعیین می کند چه چیزی به شما داده شود. در پیکربندی وب سرور ما یک خط هست که قبل از اینکه هیچ کد PHP ای اجرا شود، سرآیند کوکی درخواست را نگاه می کند و دنبال چهار نام می گردد: کوکی ورود وردپرس، کوکی صفحه رمزدار، کوکی کسی که قبلا نظر گذاشته، و کوکی نقش کاربر که افزونه کش می سازد. اگر هیچ کدام نبود، وب سرور یک فایل آماده را از روی دیسک می فرستد و PHP اصلا بیدار نمی شود. اگر یکی از آنها بود، درخواست به وردپرس سپرده می شود تا صفحه از نو ساخته شود.

پس تفاوت میلی ثانیه ای بین یک بازدیدکننده و یک کاربر وارد شده در همین یک برچسب است. و همین توضیح می دهد که چرا بعضی مشکل ها را فقط کاربران وارد شده می بینند و شما که خودتان همیشه وارد سایتتان هستید متوجهشان نمی شوید: شما و مهمانان سایت عملا دو صفحه متفاوت می گیرید.

یک نکته دیگر هم از همین جا در می آید. آن اسکریپت آمار گوگل که روی همین سایت هست، کوکی خودش را نه با سرآیند سرور بلکه با جاوااسکریپت داخل مرورگر می سازد، و چون روی دامنه خود ماست، یک کوکی خودی است. یعنی «کوکی خودی» به تنهایی به معنای «کوکی بی ضرر» نیست؛ فقط می گوید چه کسی آن را نوشته.

همان سوالی که وب سرور ما قبل از هر چیز می پرسد

درخواست یکی از چهار کوکی را دارد

بله

صفحه از نو ساخته می شود

  • کوکی ورود وردپرس
  • کوکی صفحه رمزدار
  • کوکی کسی که قبلا نظر گذاشته
  • کوکی نقش کاربر که افزونه کش می سازد
خیر

یک فایل آماده از روی دیسک

  • هیچ کد PHP ای اجرا نمی شود
  • هیچ پرس و جویی به پایگاه داده نمی رود
  • صفحه در جواب هیچ کوکی ای هم نمی گذارد
  • همان چیزی که هر مهمان سایت می گیرد

این تصمیم مال پیکربندی همین سایت است و هر سایتی قاعده خودش را دارد. نکته قابل انتقال این است که نبودن یک کوکی هم به اندازه بودنش تصمیم ساز است.

پاک کردن کوکی ها دقیقا چه کار می کند؟

سه چیز، و نه بیشتر. از همه سایت هایی که در آنها وارد بودید بیرون می آیید. تنظیم های کوچکی که سایت ها به یاد داشتند از بین می رود، مثل زبان انتخابی و اینکه فلان پیام را بسته اید. و سبد خرید سایت هایی که آن را در کوکی نگه می دارند خالی می شود، هر چند خیلی از فروشگاه ها آن را روی حساب کاربری نگه می دارند و چیزی از دست نمی رود.

حالا سه چیزی که پاک کردن کوکی ها انجام نمی دهد و مردم فکر می کنند انجام می دهد. حسابتان را حذف نمی کند و هیچ داده ای را از سرور سایت پاک نمی کند؛ آنچه سایت درباره شما ذخیره کرده سر جایش است. شما را ناشناس نمی کند، چون نشانی آی پی و مشخصات مرورگر و مهم تر از همه خود حساب کاربری که دوباره واردش می شوید سر جایشان اند. و کش مرورگر را خالی نمی کند؛ آن یک چیز دیگر است و در همان پنجره تنظیمات یک گزینه جدا دارد.

پس کی واقعا به کار می آید؟ برای یک دسته مشخص از مشکل ها که علامتشان روشن است: وقتی در حلقه ورود گیر کرده اید و سایت مدام به صفحه لاگین برمی گرداندتان، وقتی سایت اصرار دارد شما را با یک حساب قدیمی می شناسد، و وقتی یک فرم هر بار خطای عجیب و غیر قابل توضیح می دهد. در پشتیبانی، این سه علامت را که ببینیم اولین چیزی که می خواهیم همین است.

و یک هشدار عملی: پاک کردن کوکی ها شما را از همه چیز بیرون می اندازد، از جمله جاهایی که رمزشان را یادتان نیست. قبل از زدن آن دکمه مطمئن شوید به ایمیل بازیابی خودتان دسترسی دارید. اگر فقط با یک سایت مشکل دارید، در همان پنجره می شود کوکی همان یک دامنه را پاک کرد و بقیه را دست نخورده گذاشت؛ این کار تقریبا همیشه گزینه بهتری است.

آن بنر رضایت کوکی واقعا چه چیزی را عوض می کند؟

ریشه اش یک قانون اروپایی است، نه یک استاندارد فنی. دستورالعمل حریم خصوصی الکترونیک اتحادیه اروپا می گوید برای گذاشتن چیزی روی دستگاه کاربر باید رضایت گرفت، و صراحتا آن چیزهایی را که برای ارائه همان سرویسی که کاربر خواسته کاملا لازم اند از این قاعده مستثنا می کند. برای همین است که کوکی ورود در آن بنر نیست و لازم هم نیست باشد: بدون آن سرویسی که خواسته اید اصلا کار نمی کند.

در ایران قانونی وجود ندارد که این بنر را لازم کند. پس بیشتر بنرهایی که روی سایت های فارسی می بینید یا از یک قالب خارجی آمده اند یا چون همه گذاشته اند گذاشته شده اند.

و حالا موضعی که خیلی ها خوششان نمی آید. یک بنر که کوکی های ردیابی را قبل از کلیک شما می گذارد و بعد می گوید «با ادامه استفاده موافقت کرده اید»، از نداشتن بنر بدتر است. چون کار را انجام داده و در ضمن ادعا می کند رضایتی گرفته که هیچ وقت نگرفته. اگر بنری می گذارید، یا واقعا تا کلیک منتظر بمانید و اسکریپت های غیر ضروری را تا آن لحظه بارگذاری نکنید، یا اصلا نگذارید و به جایش صفحه سیاست حریم خصوصی روشنی داشته باشید که بگوید چه چیزی جمع می کنید.

و به عنوان کسانی که این را روی سایت های مشتری ها پیاده می کنیم، یک هزینه پنهان را هم بگوییم: هر بنر رضایت یک لایه جاوااسکریپت است که روی هر بارگذاری صفحه اجرا می شود و معمولا جزو اولین چیزهایی است که در گزارش سرعت به چشم می آید. اگر قرار نیست واقعا رفتار سایت را عوض کند، فقط دارید به هر بازدیدکننده وزن اضافه می فروشید.

مسیر سریع با هوش مصنوعی

راه معمولی فهمیدن اینکه یک سایت چه چیزی از شما نگه می دارد، خواندن صفحه سیاست حریم خصوصی اش است، که معمولا با کلی گویی نوشته شده. راه سریع این است که خودتان فهرست واقعی کوکی ها را از مرورگر بردارید و بعد از مدل زبانی بخواهید هر کدام را دسته بندی کند. تفاوتش این است که در چند دقیقه می بینید سایت واقعا چه چیزی گذاشته، نه چیزی که در متن حقوقی نوشته.

  1. یک پنجره ناشناس باز کنید و فقط همان یک سایت را باز کنید. این کار کوکی های قبلی شما را از تصویر بیرون می برد و نتیجه تمیز می شود.
  2. قبل از کلیک روی هر دکمه ای در بنر رضایت، ابزار توسعه دهنده را باز کنید و در بخش ذخیره سازی فهرست کوکی ها را ببینید. آنچه همین حالا آنجاست، بدون رضایت شما گذاشته شده.
  3. ستون نام و دامنه را کپی کنید و بعد روی «قبول همه» کلیک کنید و دوباره کپی کنید. اختلاف این دو فهرست همان چیزی است که رضایت شما آزادش کرد.
  4. هر دو فهرست را با هم به مدل بدهید و بخواهید هر کوکی را خودی یا شخص ثالث علامت بزند و بگوید کدام ها بدون کلیک شما گذاشته شده بودند. برای این کار یک مدل سریع و ارزان کافی است؛ کار، دسته بندی است و نه قضاوت.

نسخه آماده کپی

نقش تو تحلیلگر حریم خصوصی وب است. فقط از دو فهرست زیر کار کن و هیچ کوکی ای که در آنها نیست اضافه نکن.

دامنه سایتی که باز کردم: {دامنه}

فهرست کوکی ها پیش از کلیک روی هر دکمه بنر (نام و دامنه):
{فهرست}

فهرست کوکی ها بعد از کلیک روی قبول همه (نام و دامنه):
{فهرست}

یک جدول با این ستون ها بساز: نام کوکی، دامنه، خودی یا شخص ثالث، پیش از کلیک بود یا بعد.
تصمیم خودی یا شخص ثالث را فقط از روی مقایسه دامنه کوکی با دامنه سایتی که نوشتم بگیر.

بعد از جدول، سه جمله بنویس:
۱. چند کوکی پیش از هر کلیکی گذاشته شده بودند، و چند تای آنها شخص ثالث بودند.
۲. آیا این با یک بنر رضایت که ادعا می کند قبل از انتخاب چیزی نمی گذارد سازگار است یا نه.
۳. اگر از روی نام یک کوکی نمی توانی کارش را تشخیص بدهی، بنویس نامعلوم. حدس نزن.

قاعده: درباره اینکه هر کوکی «چه داده ای جمع می کند» چیزی از حافظه ننویس مگر اینکه نامش صراحتا مشهور باشد، و در آن حالت هم بنویس این را از حافظه می گویی و باید از مستندات همان سرویس تایید شود.

قبل از اعتماد به خروجی: مقدار کوکی را کپی نکنید، فقط نام و دامنه را. مقدار یک کوکی نشست عملا کلید ورود به همان حساب است و چسباندنش در یک ابزار آنلاین یعنی دادن دسترسی. و جواب مدل درباره اینکه یک کوکی «چه داده ای جمع می کند» را مدرک ندانید: مدل نام های مشهور را از حافظه می شناسد و برای بقیه توضیحی می سازد که قابل بررسی نیست. آنچه از این کار واقعا به دست می آید یک چیز محکم است و همان کافی است: اینکه چند کوکی پیش از کلیک شما گذاشته شده بودند.

هوش مصنوعی در این کار

در این موضوع مدل زبانی یک کار را خوب انجام می دهد و یک کار را بد، و مرزشان دقیقا معلوم است. خوب: دسته بندی کردن یک فهرست که خودتان جمع کرده اید، مقایسه دو فهرست، و ترجمه یک متن حقوقی به زبان آدمیزاد. بد: گفتن اینکه یک کوکی مشخص چه داده ای جمع می کند. آن جواب فقط برای چند نام خیلی مشهور از حافظه در می آید و برای بقیه ساخته می شود.

ابزارهایی که واقعا کمک می کنند

  • Gemini برای همین دسته بندی فهرست کوکی ها کافی است و همین جا مدل سریع و ارزان بهتر از مدل گران است، چون کار مقایسه دامنه است و نه قضاوت. صفحه خود گوگل می نویسد اپ جمنای در بیش از دویست و سی کشور و منطقه کار می کند و ایران در آن فهرست نیست.
  • Claude وقتی می خواهید متن سیاست حریم خصوصی یک سایت را با فهرست واقعی کوکی هایش مقایسه کنید، یعنی کاری که خواندن دقیق دو متن بلند است. ایران در فهرست کشورهای پشتیبانی شده انتروپیک نیست، پس راه رسمی ثبت نام و پرداخت وجود ندارد.
  • Gemini Notebook اگر سیاست حریم خصوصی یک سرویس چند ده صفحه است، بارگذاری اش و پرسیدن از داخل همان سند بهتر از خلاصه خواندن است، چون جواب به بند خودش ارجاع می دهد. روی حساب گوگل کار می کند و ایران در فهرست مناطق در دسترس نیست.

کجا نتیجه معکوس می دهد

دو خطر، و دومی از اولی جدی تر است. اول اینکه مدل درباره کوکی هایی که نامشان را نمی شناسد توضیحی می سازد که قابل بررسی نیست و کاملا مطمئن به نظر می رسد؛ خود انتروپیک این ساختن با اطمینان را در مستنداتش توهم می نامد و راهکار کم کردنش را می نویسد، یعنی سازنده هم آن را ضعف واقعی می داند. خطر دوم مال خود شماست و نه مدل: مقدار یک کوکی نشست عملا کلید ورود به همان حساب است و کسی که آن رشته را داشته باشد بدون رمز عبور شما وارد می شود. چسباندن یک فهرست کامل کوکی همراه مقدارهایش در هر ابزار آنلاینی، همان دادن دسترسی است، و راهنمای خود گوگل برای جمنای هم صریحا می گوید اطلاعات محرمانه وارد نکنید. نام و دامنه را بفرستید و مقدار را هرگز. برای اینکه ببینید پرداخت این ابزارها از ایران چه شکلی دارد، راهنمای خرید را ببینید.

منبع ها: Anthropic: reduce hallucinations Anthropic: supported countries Google: Gemini Apps privacy and data Google: where Gemini Apps are available

حد این توصیه

کوکی تنها راه به یاد سپردن شما نیست و این درس فقط همین یک راه را توضیح می دهد. مرورگرها انبارهای دیگری هم دارند که با پاک کردن کوکی ها لزوما خالی نمی شوند، و روش هایی برای شناختن یک مرورگر بدون هیچ کوکی وجود دارد که به مجموعه مشخصات دستگاه تکیه می کنند؛ هر دو موضوع خودشان را می خواهند. یک مرز دیگر هم درباره وضعیت مرورگرها: رفتار آنها با کوکی شخص ثالث چند سال است در حال تغییر است و هر جمله ای که اینجا درباره امروز بنویسیم ممکن است تا سال دیگر کهنه شود، پس مرجع نهایی صفحه تنظیمات مرورگر خودتان است و نه این صفحه. و درباره قانون: آنچه اینجا آمده توصیف یک قاعده اروپایی است و مشاوره حقوقی نیست؛ اگر سایت شما کاربر اروپایی دارد، این را با کسی که کارش همین است بررسی کنید.

از تجربه خود ما

دو چیز از سایت خودمان که هر دو همین حالا قابل بررسی اند. اول: صفحه اول rgb.ir برای یک بازدیدکننده ناشناس هیچ سرآیند Set-Cookie ای نمی فرستد؛ همین امروز دوباره درخواستش را گرفتیم و جواب صفر کوکی بود. دوم و مهم تر: در فایل پیکربندی وب سرور ما یک خط شرطی هست که پیش از اجرای هر کد PHP ای، سرآیند کوکی درخواست را در برابر چهار نام بررسی می کند، همان چهار تایی که در بخش سوم نام بردیم. اگر هیچ کدام نباشد درخواست به یک فایل آماده روی دیسک هدایت می شود و جوابش سرآیند x-fp-cache: HIT-nginx می گیرد، یعنی وردپرس اصلا اجرا نشده؛ همین حالا هم صفحه اول را با همان سرآیند گرفتیم. اگر یکی از آن چهار نام باشد، همان یک برچسب کل مسیر را عوض می کند و صفحه از نو ساخته می شود. این را نه از یک مقاله، که از فایلی برداشته ایم که همین درخواست شما را همین الان مسیریابی می کند.

سوال هایی که واقعا پرسیده می شوند

کوکی خطرناک است؟

خود کوکی متن است و اجرا نمی شود، پس ویروس نیست و به فایل ها و دوربین شما دسترسی ندارد. خطر واقعی دو چیز است: دزدیده شدن کوکی نشست، که یعنی کسی بدون رمز عبور به حساب شما وارد شود، و ردیابی بین سایت ها که موضوع حریم خصوصی است نه امنیت. برای اولی، وارد نشدن به حساب های مهم روی دستگاه و شبکه ناشناس بیشترین اثر را دارد.

اگر کوکی ها را کلا ببندم چه می شود؟

در هیچ سایتی نمی توانید وارد بمانید و سبد خرید و تنظیم های شما در هیچ جا نگه داشته نمی شود. تقریبا هیچ کس این کار را نمی کند و کار درست تر بستن فقط کوکی شخص ثالث است، که همان بخش ردیابی را می گیرد و کوکی ورود را دست نخورده می گذارد. این گزینه در تنظیمات حریم خصوصی همه مرورگرهای امروزی هست.

سایت فارسی من به بنر رضایت کوکی نیاز دارد؟

قانونی در ایران آن را الزامی نکرده است. اگر مخاطب شما کاربر اروپایی هم هست، موضوع فرق می کند و باید با کسی که کارش حقوق است بررسی کنید. نظر ما این است: بنری که پیش از کلیک کاربر کوکی ردیابی می گذارد بدتر از نداشتن بنر است، چون هم کار را کرده و هم ادعای رضایتی می کند که نگرفته.